如果声明虚函数声明为private时编译会报错,但是还是有手段调用声明为private的虚函数的。首先让我们来看看调用声明为private的虚函数时会发生什么情况。
#include <iostream>
using namespace std;
class classB
{
private:
virtual void fun() { cout << "virtual fun of classB" << endl; }
void fun2() { cout << "fun2 of classB" << endl; }
//friend int main();
};
class classA : public classB
{
public:
virtual void fun() { cout << "virtual fun of classA" << endl; }
void fun2() { cout << "fun2 of classA" << endl; }
};
int main()
{
classB *obj = new classA;
obj->fun();
obj->fun2();
while (1);
return 0;
}
那么如何能把虚函数声明为private呢,把要调用该虚函数的函数声明为类的友元函数就行了,让我们看一下。
#include <iostream>
using namespace std;
class classB
{
private:
virtual void fun() { cout << "v