荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: Part of C++ FAQ Lite[19]--继承(基础)
发信站: 荔园晨风BBS站 (Thu Jun  7 05:51:48 2001), 转信

[19] 继承 — 基础
(part of c++ faq lite, copyright ? 1991-96, marshall cline, cline@parashift.
com)
----------------------------------------------------------------------------
----
faqs in section [19]:
[19.1] 对于c++,继承是否重要?
[19.2] 何时该使用继承?
[19.3] 在c++中如何表达继承?
[19.4] 将一个子类型的指针转换成它的基类型可以吗?
[19.5] public:, private:和protected:有什么不同?
[19.6] 为什么子类不能访问基类的private:成员?
[19.7] 如何才能在改变内在部分时,保护子类不被破坏?
----------------------------------------------------------------------------
----
[19.1] 对于c++,继承是否重要?
是的。
继承就是面向对象编程和抽象数据类型(adt)编程的区分标志
----------------------------------------------------------------------------
----
[19.2] 何时该使用继承?
作为一种特化的机制.
人们抽象事物有两种角度:“部分”和“种类”。ford taurus是一种(is-a-kind-of-
a)
汽车,并且 ford taurus 有(has-a)引擎,轮胎等。“部分”层次已经随着adt风格而

成为软件系统的一部分。继承则增加了另一个分解的角度。
----------------------------------------------------------------------------
----
[19.3] 在c++中如何表达继承?
通过 :public 语法:
    class car : public vehicle {
    public:
      // ...
    };
我们有几种方式声明以上的关系
car 是 “一种”("a kind of a") vehicle
car 起源于("derived from") vehicle
car 是一种特殊化的("a specialized") vehicle
car 是 vehicle 的子类("subclass")
vehicle 是 car 的基类("base class")
vehicle 是 car 的超类("superclass")(这在c++中不通用)
(注意: 本 faq 只论述公有继承有关; 私有和保护继承是不同的)
----------------------------------------------------------------------------
----
[19.4] 将一个子类型的指针转换成它的基类型可以吗?
可以。
子类对象是基类的一种。因此从子类指针到基类指针的转换是非常安全的,并且始终会
发生。
例如,如果有一个 car 类型的指针,而实际上指向了 vehicle,这种从 car* 到 verh
icle*
的转换是非常安全的和常规的:
    void f(vehicle* v);
    void g(car* c) { f(c); }  // 非常安全; 不用转换
(注意: 本 faq 只论述公有继承有关; 私有和保护继承是不同的)
----------------------------------------------------------------------------
----
[19.5] public:, private:和protected:有什么不同?
在类的private:中声明的成员(无论数据成员或是成员函数)仅仅能被类的成员函数和
友员
访问。
在类的protected:中声明的成员(无论数据成员或是成员函数)仅仅能被类的成员函数
,友
员以及子类的成员函数和友员访问。
在类的public:中声明的成员(无论数据成员或是成员函数)能被任何人访问。
----------------------------------------------------------------------------
----
[19.6] 为什么子类不能访问基类的private:成员?
为了使子类在将来基类改变时不受影响。
子类无法访问基类的私有成员。这样在对基类私有成员作任何改变时,就有效地锁定了
子类。
----------------------------------------------------------------------------
----
[19.7] 如何才能在改变内在部分时,保护子类不被破坏?
类有两套截然不同的接口,它们分别面向两个截然不同的客户。
有为无关类服务的 public: 接口
有为子类服务的 protected: 接口
除非你期望你的所有子类全部由你自己的团队建立,否则你应该考虑让基类部分成为pr
ivate:,
并且用 protected:来内联供子类访问基类私有数据的访问函数。使用这种方法,私有部
分可
以被改变,但是子类的代码不会被破坏(除非你改变了保护的访问函数)。

--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.16]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店