运行时也不会报错。因为函数的访问权限应该只在编译期有,编译成机器码就已经没有访问权限控制了。所以最终,应该是可以编译,也可以运行。这个特点等于为我们提供了一个强制使用子类的程序员必须使用基类的指针来调用子类实现的函数,而达到多态的目的,因为子类的函数,用子类对象直接使用时,没有访问权限。
#include <iostream>
using namespace std;
class Base
{
public:
virtual void mf1() = 0;
};
class Derived: public Base
{
private:
virtual void mf1()
{
cout << "call Derived::mf1()" << endl;
}
};
int main(void)
{
Base *p = new Derived;
p->mf1();
return 0;
}