类继承的小问题

[复制链接]
查看11 | 回复2 | 2010-9-27 13:30:08 | 显示全部楼层 |阅读模式
class A{
public:
A():a(1){}
void print(){cout<<a;}
private:
int a;
};
class B:public A{
public:
B():a(4){}
private:
int a;
};
void main(){
B b;
b.print();//输出的是1 不是4,为什么?
}

回复

使用道具 举报

千问 | 2010-9-27 13:30:08 | 显示全部楼层
你好!!!首次我们要知道父类的private成员在子类中是不会被继承下来的,无论子类的成员还是通过子类对象都无法访问从基类中继承的私有成员,比如:本题继承类定义的对象:B b,然后调用对象的函数成员;b.print()此时编译器会首从子类中查找有没有函数:print(),要是找不到就从父类中找,要是在找不到的话,就会报错。但是此题的父类有这样的函数,那么对象b调用的函数是父类的,那么此函数使用的变量当然也就是父类的,要是想输出子类的变量,可以在子类中定义一个同名的函数,实现’屏蔽‘父类函数的作用:#includeusing namespace std;class A{public: A()
回复

使用道具 举报

千问 | 2010-9-27 13:30:08 | 显示全部楼层
因为B中没有print函数,调用的是A中的print函数,而A中的私有成员a被初始化为1,自然就输出是1了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行