geeksforgeeks-051-c++中虚函数的私有化

在C++中,虚函数可以是私有的,并且可以被派生类override。
如下程序可以正常运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;

class Derived;

class Base {
private:
virtual void () { cout << "Base Fun"; }
friend int main();
};

class Derived: public Base {
public:
void () { cout << "Derived Fun"; }
};

int main()
{
Base *ptr = new Derived;
ptr->fun();
return 0;
}

Output:

1
Derived ()

以上程序有几点需要注意:

1. ptr是基类类型的指针并且指向派生类,当ptr->()被调用时,派生类的()函数被执行。
2. main()函数是基类的友元函数,如果去除友元关系,程序会编译失败。