Code Bye

C++11里面的final为什么失效了

#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,为什么还是编译通过了?
还能正常运行
解决方案

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: 语法错误 : 缺少“;”(在“}”的前面)

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++11里面的final为什么失效了