background image

C++/C

 

编程指南 —类的继承与组合

对象(Object)是类(Class)的一个实例(Instance)。如果将对象比作房子,那么类就是

 

房子的设计图纸。所以面向对象设计的重点是类的设计,而不是对象的设计。
对于 C++程序而言,设计孤立的类是比较容易的,难的是正确设计基类及其派生类。本章

仅仅论述 继承 (Inheritance

)和 组合 (Composition)的概念。

注意,当前面向对象技术的应用热点是 COM 和 CORBA,这些内容超出了 C++教材的范
畴,请阅读 COM 和 CORBA 相关论著。
10.1 继承
如果 A 是基类,B 是 A 的派生类,那么 B 将继承 A 的数据和函数。例如:
class A
{
public:
void Func1(void);
void Func2(void);
};
class B : public A
{
public:
void Func3(void);
void Func4(void);
};
main()
{
B b;
b.Func1(); // B 从 A 继承了函数 Func1
b.Func2(); // B 从 A 继承了函数 Func2
b.Func3();
b.Func4();
}
这个简单的示例程序说明了一个事实:C++ “

的 继承 特性可以提高程序的可复用性。正因

为 继承 太有用、太容易用,才要防止乱用 继承 。我们应当给 继承 立一些使用规则。
l 【规则 10-1-1】如果类 A 和类 B 毫不相关,不可以为了使 B 的功能更多些而让 B 继承 A

的功能和属性。不要觉得 白吃白不吃 ,让一个好端端的健壮青年无缘无故地吃人参补身
体。
l 【规则 10-1-2】若在逻辑上 B 是 A

的 一种 (a kind of ),则允许 B 继承 A 的功能和属性。

例如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。那么类 Man 可以
从类 Human 派生,类 Boy 可以从类 Man 派生。
class Human
{

};
class Man : public Human
{