#include <iostream>
using namespace std;
class A
{
public:
virtual void fun() final;
};
void A::fun()
{ cout << ” fun() in A” << endl;}
class B : public A
{
public:
void fun()
{ cout << “override ” << endl;}
};
int main()
{
B b;
b.fun()
}
加了final,为什么还是编译通过了?
还能正常运行
using namespace std;
class A
{
public:
virtual void fun() final;
};
void A::fun()
{ cout << ” fun() in A” << endl;}
class B : public A
{
public:
void fun()
{ cout << “override ” << endl;}
};
int main()
{
B b;
b.fun()
}
加了final,为什么还是编译通过了?
还能正常运行
解决方案
20
sh-4.3$ g++ -std=c++11 -o main main.cpp main.cpp:15:16: error: virtual function "virtual void B::fun()" void fun() ^ main.cpp:9:6: error: overriding final function "virtual void A::fun()" void A::fun() ^ main.cpp: In function "int main()": main.cpp:22:1: error: expected ";" before "}" token } ^
40
帮你测试不能通过编译:
1>test\test.cpp(21): error C3248: “A::fun”: 声明为“final”的函数无法被“B::fun”重写
1> test.cpp(13) : 参见“A::fun”的声明
1>test.cpp(28): error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>test\test.cpp(21): error C3248: “A::fun”: 声明为“final”的函数无法被“B::fun”重写
1> test.cpp(13) : 参见“A::fun”的声明
1>test.cpp(28): error C2143: 语法错误 : 缺少“;”(在“}”的前面)