注册 登录
编程论坛 C++教室

急!!!

hxe206 发布于 2008-06-24 12:21, 810 次点击
#include<iostream>
using namespace std;
class A{
public:
    virtual void a(){cout<<"A"<<endl;}
};
class B:public  A{
private:
    virtual void a(){cout<<"B"<<endl;}
};
int main()
{
    A *p;
    p=new B;
    p->a();
    return 0;
}//输出为B

这个程序怎么可以运行,怎么没出错呢?为什么可以访问私有成员函数呢?
7 回复
#2
sunkaidong2008-06-24 15:04
找了下书,没看到结果。。对于virsual关键字声明的函数,表示在该类的子类中有实现,一般理解是不用private的,因为你用的时候可能限制住多态了,至于为什么能用,不是很清楚。。有看到过的可以说下。。。
#3
中学者2008-06-24 15:29
派生类的virtual接口与基类权限一致.... - -!!
LZ看的啥书?如果是国产著作,建议你丢了.
#4
hxe2062008-06-24 16:03
[bo][un]中学者[/un] 在 2008-6-24 15:29 的发言:[/bo]

派生类的virtual接口与基类权限一致.... - -!!
LZ看的啥书?如果是国产著作,建议你丢了.

不管什么书,但是我确实运行了那个程序,没有一点问题的,现在就是那个程序为什么不会出错
#5
中学者2008-06-24 16:16
- -.我不是已经告诉你为什么了麽?看不明白?
#6
安静的小羊2008-06-24 19:15
如楼上所说,覆盖的函数不能改变访问属性
#7
hxe2062008-06-25 12:36
不好意思啊,没看清楚
现在好像看明白啦
谢了啊
#8
hp521_kylin2008-06-25 22:44
看了下书:我觉得问题是派生类和基类的特殊关系!!
建议你取看看就可以得到结果。
1