相关疑难解决方法(0)

c ++通过clang重载虚函数警告?

clang在编译以下代码时发出警告:

struct Base
{
    virtual void * get(char* e);
//    virtual void * get(char* e, int index);
};

struct Derived: public Base {
    virtual void * get(char* e, int index);
};
Run Code Online (Sandbox Code Playgroud)

警告是:

warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual]
Run Code Online (Sandbox Code Playgroud)

(当然需要启用上述警告).

我不明白为什么.请注意,在Base中取消注释相同的声明会关闭警告.我的理解是,由于两个get()函数具有不同的签名,因此不能隐藏.

clang对吗?为什么?

请注意,这是在MacOS X上,运行最新版本的Xcode.

clang --version
Apple LLVM version 5.0 (clang-500.1.74) (based on LLVM 3.3svn)
Run Code Online (Sandbox Code Playgroud)

更新:与Xcode 4.6.3相同的行为.

c++ virtual hidden warnings overloading

65
推荐指数
4
解决办法
4万
查看次数

派生抽象类中的纯虚方法

说我们有这个:

class A
{
   public:
   virtual void foo() = 0;
};

class B: public A
{
   public:
   virtual void foo() = 0;
};
Run Code Online (Sandbox Code Playgroud)

编译器不会抛出错误,我猜它是因为B也是一个抽象类,因此它不必foo从A 实现.但这样的构造意味着什么?

1)fooB foo从A 隐藏吗?

2)继承自B并且不是抽象类的第一个类,它必须提供两个实现,如:

class C: public B
{
   public:
   virtual void A::foo() {};
   virtual void B::foo() {};
};
Run Code Online (Sandbox Code Playgroud)

编译器只会抱怨如果B::foo()缺少实现,但它不会抱怨丢失A::foo().

总而言之:这是一种隐藏纯虚方法的方法吗?

c++ virtual inheritance

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×2

virtual ×2

hidden ×1

inheritance ×1

overloading ×1

warnings ×1