首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教 在派生类中 虚函数被protected修饰还有用处么

2012-04-09 
请问 在派生类中 虚函数被protected修饰还有用处么#include iostreamusingnamespacestdclassb{public:v

请问 在派生类中 虚函数被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函数。
[解决办法]
有时候下,还会有相反的情况:只允许从子类接口上访问。

热点排行