| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 676 人关注过本帖
标题:关于C++中的继承问题
只看楼主 加入收藏
天灵
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-7-19
收藏
 问题点数:0 回复次数:5 
关于C++中的继承问题

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

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

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

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

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

搜索更多相关主题的帖子: 继承 
2007-07-19 20:23
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

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

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

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

再看看书,会弄明白的。


Fight  to win  or  die...
2007-07-19 22:18
天灵
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-7-19
收藏
得分:0 
看什么书?
我看的几本书都没有说明白啊?
2007-07-20 12:51
一番宝瓶
Rank: 1
等 级:新手上路
帖 子:239
专家分:0
注 册:2007-7-14
收藏
得分:0 
无论什么书上写的是机制,运用下就变成你自己掌握的了, 建议你写个程序研究一下

包括基类 派生类, 并在在构造函数和析构函数中写入提示语句, 然后在主函数中创建对象来观察调用情况

2.3.2.2.2.0
2007-07-20 13:09
龙飞雪影
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-17
收藏
得分:0 

这个程序也许对理解有帮助
#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();
}


2007-07-20 13:13
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
21天, 浅显易懂讲的明白..

女侠,约吗?
2007-07-21 09:14
快速回复:关于C++中的继承问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017220 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved