C++ FAQ Lite[19]--继承(基础)(更新)

原创 2001年04月23日 22:04:00

[19] 继承 — 基础
(Part of C++ FAQ Lite, Copyright © 1991-2001, Marshall Cline, cline@parashift.com)

简体中文版翻译:申旻nicrosoft@sunistudio.com东日制作室东日文档


FAQs in section [19]:


[19.1] 对于C++,继承是否重要?

是。

继承是面向对象编程和抽象数据类型(ADT)编程的区分标志

TopBottomPrevious sectionNext section ]


[19.2] 何时该使用继承?

作为一种特化的机制。

人们抽象事物有两种角度:“部分”和“种类”。Ford Taurus是一种(is-a-kind-of-a)汽车,并且 Ford Taurus 有(has-a)引擎,轮胎等。“部分”层次已经随着ADT风格而成为软件系统的一部分。继承则增加了另一种分解的角度。

TopBottomPrevious sectionNext section ]


[19.3] 在C++中如何表达继承? UPDATED!

[Recently added "derived class of" to the list of synonyms (on 7/00). Click here to go to the next FAQ in the "chain" of recent changes.]

通过 :public  语法:

 class Car : public Vehicle {
 public:
   
// ...
 };

我们有几种方式声明以上的关系:

  • Car 是 “一种”("a kind of a")Vehicle(交通工具)
  • Car 起源于("derived from")Vehicle
  • Car 是一种特殊化的("a specialized") Vehicle
  • CarVehicle的一个子类("subclass")
  • CarVehicle的一个派生类(“derived class”)
  • VehicleCar的基类("base class")
  • VehicleCar 的超类("superclass")(这在C++ 社群中不常用)

(注意: 本 FAQ 的论述仅与公有继承(public inheritance)有关; 私有和保护继承并不相同)

TopBottomPrevious sectionNext section ]


[19.4] 将一个派生类型的指针转换成它的基类型可以吗?

可以。

派生类对象是基类对象的一种。因此从派生类指针到基类指针的转换是非常安全的,并且始终会发生。例如,如果有一个 car 类型的指针,而实际上指向了 vehicle,这种从 Car* 到 Vehicle* 的转换是非常安全的和常规的:

 void f(Vehicle* v);
 void g(Car* c) { f(c); }  
// 非常安全; 不用转换

(注意: 本 FAQ 的论述仅与公有继承(public inheritance)有关; 私有和保护继承并不相同)

TopBottomPrevious sectionNext section ]


[19.5] public:, private:protected:有什么不同?

  • 在类的private:节中声明的成员(无论数据成员或是成员函数)仅仅能被类的成员函数和友元访问。
  • 在类的protected: 节中声明的成员(无论数据成员或是成员函数)仅仅能被类的成员函数,友元以及子类的成员函数和友元访问。
  • 在类的public:节中声明的成员(无论数据成员或是成员函数)能被任何人访问。

TopBottomPrevious sectionNext section ]


[19.6] 为什么派生类不能访问基类的private:成员?

为了使派生类在将来基类改变时不受影响。

派生类无法访问基类的私有成员。这样在对基类私有成员作任何改变时,就有效地锁定了派生类。

TopBottomPrevious sectionNext section ]


[19.7] 如何才能在改变类的内在部分时,保护其派生类不被破坏?UPDATED!

[Recently renamed "subclass" to "derived class" (on 7/00). Click here to go to the next FAQ in the "chain" of recent changes.]

类有两套截然不同的接口,它们分别面向两个截然不同的客户:

  • 有为无关类服务的public: 接口
  • 有为派生类服务的protected: 接口

除非你期望你的所有子类全部由你自己的团队建立,否则你应该考虑让基类部分成为private:,并且用 protected:来内联供子类访问基类私有数据的访问函数。使用这种方法,私有部分可以被改变,但是派生类的代码不会被破坏(除非你改变了protected的访问函数)。

TopBottomPrevious sectionNext section ]


E-Mail E-mail the author
C++ FAQ LiteTable of contentsSubject indexAbout the author©Download your own copy ]
Revised Apr 8, 2001

C++11 FAQ中文版

C++11 FAQ中文版 http://www.chenlq.net/cpp11-faq-chs http://www.stroustrup.com/C++11FAQ....
  • bamboolsu
  • bamboolsu
  • 2015年03月20日 17:41
  • 1507

Java基础(19,20(1))IO流

------- android培训、java培训、期待与您交流! ---------- 十七.复制一个图片      虽然简单,但是考试会考 思路: 1.用字节读取流对象和图片关联。 2.用字节写入...
  • u011889786
  • u011889786
  • 2015年04月03日 21:58
  • 313

机器学习保险行业问答开放数据集: 1. 语料介绍

原文 目前机器学习,尤其是因为深度学习的一波小高潮,大家对使用深度学习处理文本任务,兴趣浓厚,数据是特征提取的天花板,特征提取是深度学习的天花板。在缺少语料的情况下,评价算法和研究都很难着手...
  • QFire
  • QFire
  • 2017年11月16日 11:04
  • 130

C++ 深入理解 虚继承、多重继承和直接继承

本文从5段代码实例出发,通过类中类的普通继承,类的虚继承,类的多重继承,多个虚函数类的普通继承、虚继承与多重继承,几个交叉概念,详细的阐释了继承、虚函数与虚继承的基本概念,深入剖析了继承于虚继承的区别...
  • u013630349
  • u013630349
  • 2015年07月25日 16:54
  • 6463

浅析C++继承与派生

测试环境: Target: x86_64-linux-gnu gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1)  定义 要分析继承,首先...
  • qq_33724710
  • qq_33724710
  • 2016年06月11日 10:44
  • 2953

C++ FAQ学习笔记 25章 继承 — 多继承和虚继承

等待中
  • u010278548
  • u010278548
  • 2013年08月30日 13:31
  • 526

C++之单继承与多继承

继承性是面对对象程序设计中最重要的特征之一它允许在既有类的基础上创建新类,并可以根据所面对问题的不同情况对新类进行更具体,更详细的说明与操作。 通过代码看基类与派生类class A /...
  • qq_36782456
  • qq_36782456
  • 2017年04月13日 16:37
  • 1136

C++精进篇(九)之―继承及经典示例

继承是C++的重要属性:         在C++中有:         公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(p...
  • fanyun_01
  • fanyun_01
  • 2016年03月26日 09:20
  • 6086

【c++知识归纳】继承与多态(一)

c++是基于面向对象的编程语言,面向对象的三大特性为:封装、继承和多态。本文将我对继承与多态的理解进行了总结归纳,这部分内容对于学习c++编程语言是非常重要的,文章加入我的个人理解,希望能给大家带来帮...
  • XHfight
  • XHfight
  • 2016年08月24日 02:45
  • 1252

C++的三种访问权限与三种继承方式

三种访问权限我们知道C++中的类,有三种访问权限(也称作访问控制),它们分别是public、protected、private。要理解它们其实也很容易,看下面了一个例子。 父类:class Pers...
  • luoweifu
  • luoweifu
  • 2015年07月19日 11:10
  • 11320
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ FAQ Lite[19]--继承(基础)(更新)
举报原因:
原因补充:

(最多只允许输入30个字)