C++中私有虚函数的语意是否合理?
如下所示的代码及其变体:
#include "stdafx.h"
#include <iostream>
using namespace std;
class base
{
public:
virtual ~base(){}
void Out()
{
OutPut();
}
private:
virtual void OutPut() = 0;
};
class derived : public base
{
public:
virtual ~derived(){};
private:
void OutPut()
{
cout << "Hello world,I am a derived object!";
}
};
class derived2 : public derived
{
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
base* p = new derived2;
p->Out();
delete p;
return 0;
}
在vc7.1,cbx,dev c++ 中都通过了,调用的是derived的Output函数。
我的疑问是在这个地方,作为实际类型是derived2的指针,p是否真的有资格通过Out函数调用derived类的私有函数Output?若是可以,岂不是使得private控制形同虚设?
望各位大虾指教。