最近我遇到了一个令人沮丧的问题,它归结为一个非常简单的编码错误。请看下面的代码:缺少虚拟关键字的警告
#include <iostream>
class Base
{
public:
void func() { std::cout << "BASE" << std::endl; }
};
class Derived : public Base
{
public:
virtual void func() { std::cout << "DERIVED" << std::endl; }
};
int main(int argc, char* argv[])
{
Base* obj = new Derived;
obj->func();
delete obj;
return 0;
}
输出是
BASE
显然,(这种情况),我的意思是,把虚拟关键字在基地:: FUNC使派生:: func将在main中调用。我意识到这可能是(可能)由C++标准允许的,可能有很好的理由,但在我看来,99%的时间这将是一个编码错误。但是,当我使用g ++和我能想到的所有-Wblah选项进行编译时,不会生成任何警告。
当派生类和派生类都具有相同名称的成员函数,而派生类的函数是虚拟的,而基类的函数不是虚函数时,是否有方法生成警告?
'delete'的例子不能因为'Base'没有一个'virtual'析构函数 – 2012-09-28 20:02:50