运维经–目录
error: overriding final function
c++11中引入了final关键字,被final修饰的函数不允许其派生类重载。
#include <iostream>
class Object
{
public:
Object(){};
virtual ~Object(){};
virtual void fun()
{
std::cout << "Object::fun" << std::endl;
}
};
class Base:public Object
{
public:
Base(){};
virtual ~Base(){};
void fun() final;
};
void Base::fun()
{
std::cout << "Base::fun" << std::endl;
}
class Derived : public Base
{
public:
Derived(){};
virtual ~Derived(){};
void fun();
};
void Derived::fun()
{
std::cout << "Derived::fun" << std::endl;
}
int main(){
// Object o;
// o.fun();
Object* d = new Derived;
d->fun();
return 0;
}
编译报错
[frank@LAPTOP-0OCJTGJR class]$ g++ -g -std=c++11 test_class.cpp
test_class.cpp:34:10: error: virtual function ‘virtual void Derived::fun()’
void fun();
^
test_class.cpp:23:6: error: overriding final function ‘virtual void Base::fun()’
void Base::fun()
^