hxe206 发表于 2008-6-24 12:21

急!!!

#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

这个程序怎么可以运行,怎么没出错呢?为什么可以访问私有成员函数呢?

sunkaidong 发表于 2008-6-24 15:04

找了下书,没看到结果。。对于virsual关键字声明的函数,表示在该类的子类中有实现,一般理解是不用private的,因为你用的时候可能限制住多态了,至于为什么能用,不是很清楚。。有看到过的可以说下。。。

中学者 发表于 2008-6-24 15:29

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

hxe206 发表于 2008-6-24 16:03

[quote][bo][un]中学者[/un] 在 2008-6-24 15:29 的发言:[/bo]

派生类的virtual接口与基类权限一致.... - -!!
LZ看的啥书?如果是国产著作,建议你丢了. [/quote]
不管什么书,但是我确实运行了那个程序,没有一点问题的,现在就是那个程序为什么不会出错

中学者 发表于 2008-6-24 16:16

- -.我不是已经告诉你为什么了麽?看不明白?

安静的小羊 发表于 2008-6-24 19:15

如楼上所说,覆盖的函数不能改变访问属性

hxe206 发表于 2008-6-25 12:36

不好意思啊,没看清楚
现在好像看明白啦
谢了啊

hp521_kylin 发表于 2008-6-25 22:44

看了下书:我觉得问题是派生类和基类的特殊关系!!
建议你取看看就可以得到结果。

页: [1]

编程论坛