请问 在派生类中 虚函数被protected修饰还有用处么
#include <iostream>
using namespace std;
class b
{
public :
virtual void good()
{
cout < < "i 'm b " < <endl;
}
};
class d:public b
{
protected:
void good()
{
cout < < "i 'm d " < <endl;
}
};
int main()
{
int c;
b *ob=new b();
ob-> good();
delete ob;
ob=new d();
ob-> good();
delete od;
cout < < "hello,world " < <endl;
getchar();
return 0;
}
在vc2003中,编译通过了,请问是什么原因,为什么指针直接指派生类就不会编译通过
[解决办法]
虚函数的概念是:函数的调用法则由声明的类决定,实现的方法由相应的派生类去完成。
在楼主的例子中,b *ob表明ob是一个b类型的指针变量,虽然ob=new d;使其指向一个d类,但作为编译器并没有重新声明为d类指针,所以能够编译/运行就很正常了。
楼主看来对类的声明与实际引用的数据类型存在认识上的误区,调度的可行性与变量的声明类型相关,而具体实现则与实际的数据类型有关,这就是多态设计。
[解决办法]
你举的这种情况就是用于达到这种效果的:外界只能从父类接口上访问good函数。
[解决办法]
有时候下,还会有相反的情况:只允许从子类接口上访问。