1.概要
c++11 新特性 final修饰虚函数时不能被重写
2.代码
#include <iostream>
using namespace std;
namespace T1 {
class A
{
public:
virtual void fun() {
cout << "a fun \n";
}
};
class A1 :A
{
public:
void fun() {
cout << "a1 fun \n";
}
};
class A2 :A1
{
public:
void fun() {
cout << "a2 fun \n";
}
};
void test() {
cout << "test1-----------------------\n";
A* a = (A*)new A1();
a->fun();
A* a2 = (A*)new A2();
a2->fun();
}
}
namespace T2 {
class A
{
public:
virtual void fun() {
cout << "a fun \n";
}
};
class A1 :A
{
public:
void fun() final {
cout << "a1 fun \n";
}
};
class A2 :A1
{
public:
/* Overwrite not allowed
void fun() {
cout << "a2 fun \n";
}*/
};
void test() {
cout << "test2---------final: Overwrite not allowed-------\n";
A* a = (A*)new A1();
a->fun();
A* a2 = (A*)new A2();
a2->fun();
}
}
int main()
{
T1::test();
T2::test();
std::cout << "Hello World!\n";
}
3.运行结果
test1-----------------------
a1 fun
a2 fun
test2---------final: Overwrite not allowed-------
a1 fun
a1 fun
Hello World!