大家,先想一想,如果把原来实现多态的父类中virtual函数声明为private的形式,是否还可以实现多态呢。答案将由下面的代码给出。
#include<iostream>
using namespace std;
class A
{
private:
virtual void print()
{
cout<<"in class A!"<<endl;
}
public:
void f()
{
print();
}
};
class B:public A
{
public:
void print()
{
cout<<"in class B!"<<endl;
}
};
class D:public A
{
public:
void print()
{
cout<<"int class D!"<<endl;
}
};
int main(void)
{
A *p1=new B;
p1->f();
A *p2=new D;
p2->f();
return 0;
}
答案是可以的,至于为什么,这是一种设计模式的理念。具体的等我弄懂了再补充大家可以先自己想下,研究研究。