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

关于C++中的继承问题

天灵 发布于 2007-07-19 20:23, 679 次点击

看了这么久的C++,我始终对C++的继承机制不太了解,希望各位大大可以帮我解解惑.
C++中关于派生有以下几条"规则",但它们似乎是互相矛盾的.

派生类将基类的所有成员(除构造函数和析构函数外)无选择性地全部接收......1

基类的私有成员对派生类不可见..........................................2

调用派生类的构造函数和析构函数时,要调用到基类的构造函数和析构函数.
要使用基类的私有成员,要用基类的公有成员函数调用.......................3

问题:
1) 由1,2可以看到基类的私有成员是被接收了的,但基类的私有成员对派生类不可见,说明基类的私有成员被以某种方式"隐藏"了,但类的public,private,protected是不能隐藏的,那么它是怎么做到的呢?
2) 由1可以看到派生类应该是独立的,完整的一个类,但是派生类的构造函数和析构函数却要调用到基类的构造函数和析构函数,被"隐藏"的基类的私有成员却可以通过基类的公有成员函数和构造函数来进行赋值,计算等运算,这似乎和第1条不相服,这是为什么呢?

5 回复
#2
aipb20072007-07-19 22:18

为什么要去钻1,2,3条那本就含糊不清的概念?接收和不可见在你是怎么理解的???

1,所谓不可见,就是不能直接访问(可以通过公有接口访问),并非说他不存在。这是个继承中访问控制的问题。

2,楼主连继承关系都没弄清,你难道不知道派生对象是在创建基类对象后创建的吗?

再看看书,会弄明白的。

#3
天灵2007-07-20 12:51
看什么书?
我看的几本书都没有说明白啊?
#4
一番宝瓶2007-07-20 13:09
无论什么书上写的是机制,运用下就变成你自己掌握的了, 建议你写个程序研究一下

包括基类 派生类, 并在在构造函数和析构函数中写入提示语句, 然后在主函数中创建对象来观察调用情况
#5
龙飞雪影2007-07-20 13:13

这个程序也许对理解有帮助
#include <iostream>
using namespace std;

class Vehicle
{
public:
Vehicle(float speed,int total)
{
Vehicle::speed=speed;
Vehicle::total=total;
}
void ShowMember()
{
cout<<speed<<"|"<<total<<endl;
}
protected:
float speed;
int total;
};
class Car:public Vehicle
{
public:
Car(int aird,float speed,int total):Vehicle(speed,total)
{
Car::aird=aird;
}
void ShowMember()
{
cout<<speed<<"|"<<total<<"|"<<aird<<endl;
}
protected:
int aird;
};

void main()
{
Vehicle a(120,4);
a.ShowMember();
Car b(180,110,4);
b.ShowMember();
cin.get();
}

#6
野比2007-07-21 09:14
21天, 浅显易懂讲的明白..
1