C++:使用复合(composition) 代替 private继承

复合方式(composition)和 private继承, 都能表示, 根据某个类实现出新的类的形式, 即通过使用protected成员, 和重写virtual函数.

优先选择复合方式. 原因:

1. 复合方式, 可以实现重写virtual函数, 然后阻止派生类重新定义virtual函数;

2. 可以使Widget的编译依存度降至最低, 即只包含类的声明式(复合), 而避免包含基类的头文件(继承);

例外: private继承, 可以使EBO(空白基类最优化), 在某些空白基类的情况下很重要, 不过很少出现. 所以优先复合.

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

时间: 2024-10-26 22:22:18

C++:使用复合(composition) 代替 private继承的相关文章

C++:通过私有(private)继承复用类实现工厂函数详解

通过接口类(interface class), 实现工厂函数, 可以复用(reuse)已有类, 重写实现接口. 如: 接口类: IPerson; 复用类: PersonInfo; 实现类: CPerson; 工厂函数: DatabaseID askUserForDatabaseID(); std::shared_ptr<IPerson> makePerson(DatabaseID personIndetifier); 可以通过私有继承复用类PersonInfo,公有继承接口类IPerson,

变量-C#类的继承,C#有public,protected,private这几种继承之说吗??

问题描述 C#类的继承,C#有public,protected,private这几种继承之说吗?? 如果没有,那是以哪种形式继承: 如果父类 有1.private 变量,2.protected变量 ,3.public变量, 在子类中这几个变量是什么,是private .protected.public. 解决方案 没有,C#和C++不同,只有一种继承方式,相当于C++的public继承.也就是基类中的private成员,在派生类中不可见.另外,在C# 1.0的时代,C#的继承方式相当于priva

C++中的三种继承public,protected,private详细解析_C 语言

三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 protect 继承 private 继承 组合结果 基类中 继承方式 子类中 public & public继承 => public public & protected继承 => protected public & private继承 = > private protected &am

C++类的继承与多重继承的访问控制

在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论. 对于单个类来说,讨论保护继承与私有继承的区别意义是不大的,他们的区别只在多级继承的情况中体现. 在这里我声明一下,对于此章节的内容不太适合用过多的文字进行描述,主要还是看例子,通过例子熟悉之间的关系,过多的文字描述会模糊读者思路. 例程如下(重要部分都做了详细说明): //程序作者:管宁//站点:www.cndev-lab.com//所有稿

C++中public、protected及private用法

转自:http://www.jb51.net/article/54224.htm 初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂.今天本文就来十分分析一下C++中public.protected及private用法.相信对于大家深入掌握C++程序设计会有很大的帮助. 这里我们首先要明白下面几点. 1.类的一个特征就是封装,public和private作用就是实现这一目的.所以: 用户代码(类外)可以访问public成

C++继承中的访问控制实例分析_C 语言

本文较为深入的探讨了C++继承中的访问控制,对深入掌握C++面向对象程序设计是非常必要的.具体内容如下: 通常来说,我们认为一个类有两种不同的用户:普通用户 和 类的实现者.其中,普通用户编写的代码使用类的对象,这部分代码只能访问类的公有(接口)成员:实现者则负责编写类的成员和友元的代码,成员和友元既能访问类的公有部分,也能访问类的私有部分.如果进一步考虑继承的话就会出现第三种用户,即派生类.派生类可以访问基类的公有(public)成员和受保护(protected)成员,但不能访问基类的私有(p

深入理解C++中public、protected及private用法_C 语言

初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂.今天本文就来十分分析一下C++中public.protected及private用法.相信对于大家深入掌握C++程序设计会有很大的帮助. 这里我们首先要明白下面几点. 1.类的一个特征就是封装,public和private作用就是实现这一目的.所以: 用户代码(类外)可以访问public成员而不能访问private成员:private成员只能由类成员(类内)和友元访问.

类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

 常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式. 案例: #include <iostream> class fushu { public: //通过加explicit的这种方式避免隐式转换,避免引发歧义 explicit fushu(int num) { x = num; y = num; } void print() { std::cou

《C++语言基础》程序阅读——继承和派生

返回:贺老师课程教学链接 (1) #include <iostream> using namespace std; class Data { public: Data(int i):x(i) { cout<<"A"; } ~Data() { cout<<"B"; } private: int x; }; class Base { public: Base(int i):b1(i) { cout<<"C&quo