C++ 继承和包含的区别?

在《代码大全》这本书的第六章中提到了有关包含与继承的一些原则,我摘取如下:

一、包含("has a")

包含表示一个类含有一个基本数据元素或对象。包含是面向对象编程的主力技术。

(1)通过包含来实现"has a"的关系。

(2)在万不得已时通过private继承来实现"has a"的关系。

(3)警惕有超过有7个数据成员的类。

二、继承("is a")

继承的概念是说一个类是另一个类的一种特化。

(1)采用public继承实现"is a"的关系。

(2)要么采用继承并进行详细说明,要么就不要用它。

(3)确保只继承需要继承的部分。派生类可以继承成员函数的接口和/或实现。

(4)不要"覆盖"一个不可覆盖的成员函数。派生类中的成员函数不要与基类中不可覆盖的成员函数重名。

(5)尽量使用多态,避免大量的类型检查。

(6)让所有的数据都是private而非protected。

三、何时使用继承、何时使用包含

(1)如果多个类共享数据而非行为,应该创建这些类可以包含的共用对象。

(2)如果多个类共享行为而非数据,应该让它们从共同的基类继承而来,并在基类里定义共用的子程序。

(3)如果多个类既共享行为又共享数据,应该让它们从共同的基类继承而来,并在基类里定义共用的数据和子程序。

(4)当你想由基类控制接口时,使用继承;当你想自己控制接口时,使用包含。

时间: 2024-10-18 06:45:39

C++ 继承和包含的区别?的相关文章

Flask之模板之宏、继承、包含

3.5 宏.继承.包含 类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余. Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复. 定义宏 {% macro input() %} <input type="text" name="username" value="" size="30"/> {% endmacro %} 调用宏

JSP页面静态包含和动态包含的区别与联系

---恢复内容开始--- JSP页面静态包含和动态包含的区别与联系: 1.<%@ include file=" " %> 是指令元素,<jsp:include page=" "/> 是行为元素. 2.静态包含: 语法:<%@ include file=" " %>, 包含文件先是要直接复制一份内容到主体页面内,然后被包含的内容一起和主体转换成.class文件.只出现一个.class文件一个java文件,最终编译

类继承和重写的区别

类的继承,是在父类中存在可继承的成员A,而在子类中不存在同名成员,这样该成员会被继承到子类,当子类对象访问该成员时,实际访问的是父类的对应成员.类的重写,是在父类中存在可继承的成员A,而在子类中存在同名成员,这样该成员会被子类重写,当子类对象访问该成员时,实际访问的是子类的成员.所以二者的区别就是,当重写的时候,访问的重写成员与父类实际上是没有关系的,而继承时访问的是父类成员.

c++ 继承和组合的区别

1.什么是继承 A继承B,说明A是B的一种,并且B的所有行为对A都有意义 eg:A=WOMAN B=HUMAN A=鸵鸟 B=鸟 (不行),因为鸟会飞,但是鸵鸟不会. 2.什么是组合 若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B. 例如眼(Eye).鼻(Nose).口(Mouth).耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye.Nose.Mouth.Ear组合而成,不是派生而成 3.继承的优点和缺点 优点: 容易进行新

Jsp静态包含和动态包含的区别

一.静态包含指令<%@include file=“fileurl”%> 1.两个jsp页面的<%@page contentType=“text/html:charset=gbk”%>应该保持一致 2.不能通过fileurl向被包含的jsp页面传递参数,因为此静态包含是发生在jsp页面转换为servlet的转 换期间,此时的参数是服务器端设置的死的参数,完全没有经过客户端,这种参数是没有意义的,如<%@include  file=“fileurl?user=admin”%>

IT兄弟连 JavaWeb教程 JSP静态包含和动态包含的区别

JSP静态包含(<%@ include>和JSP动态包含<jsp:include>同样都可以用来包含文件,但是他们之间是存在很大差别的.下面将对include指令与include动作的区别进行详细介绍: ●  include指令通过file属性指定被包含的文件,并且file属性不支持任何表达式:include动作标识通过page属性指定被包含的文件,而且page属性支持JSP表达式. ●  使用include指令时,被包含的文件内容会原封不动地插入到包含页中,然后JSP编译器在将合

组合、继承和代理的区别

三者的定义: 组合:在新类中new 另外一个类的对象,以添加该对象的特性. 继承:从基类继承得到子类,获得基类的特性. 代理:在代理类中创建某功能的类,调用类的一些方法以获得该类的部分特性. 使用场合: 组合:各部件之间没什么关系,只需要组合即可.like组装电脑,需要new CPU(),new RAM(),new Disk()…… 演示代码如下: 1 public class Computer { 2 public Computer() { 3 CPU cpu=new CPU(); 4 RAM

转载 -jsp静态包含和动态包含的区别

原博地址:http://blog.csdn.net/baidu_21578557/article/details/51226678 主要从以下5方面进行分析: 1.语法: 静态包含:<%@ include file=""%> 动态包含:<jsp: include page=""%> 2.静态包含时,包含页面和被包含页面中的html.head,body等标签总共只有出现一次,否则会报错:而动态包含不会. 3.静态包含不会检查所包含文件中的变化:

java 复用类的三种方式区别 组合,继承,代理的区别

1. 组合 : 只需在新类中产生现有类的对象 .(is - a 有一个) 新类是由现有类的对象组成. (引用初始化与作用域?) 2. 继承 : 按照现有类的类型来创造新类. (has - a 有一个)无需改变现有类的形式,采用现有类的形式并在其中添加新代码.3. 代理 : 我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)