(总结)C++中实现代码重用的手段----继承和聚合
来源:互联网 发布:清华大学软件学院地址 编辑:程序博客网 时间:2024/05/19 00:53
1.继承:
B继承A的条件:
逻辑上B是A的"一种(a kind of)",且A的所有属性和功能对B都有意义,则容许继承.
比如CSaleman(销售人员)类继承CCompanyStaff(员工)类,
轿车可以继承交通工具的所有特征.因为轿车是一种交通工具.
2.聚合.
A聚合B的条件:
逻辑上B是A的"一部分(a part of)",A需要使用B的功能,而A和B又不属于同一类的范畴,
比如CCompanyStaff(员工)类聚合CEducation(学历)类,Line(线段)类聚合Point(点)类.
轿车类内嵌发动机的对象,两者不能继承,不属于一类,只能聚合,让轿车使用发动机的功能.
1.在一个类中内嵌其他类的对象作为成员.
聚合类:内嵌其他类的对象作为成员的类.
聚合类的"内嵌对象"("子对象").
2.聚合类与聚合类的内嵌对象之间的关系是:
整体与部件的关系,两者往往不属于同一类范畴.
也是拥有和被拥有的关系.前者可以使用后者的功能.
3."聚合"隐含两种实现方式:
1)."包含"关系:例如线段可由两个点组成,是独立的定义,两者具有不同的生命周期
2)."嵌套"关系:整体对象的一个属性就是部分对象,唯一属于关系,具有相同的生命周期
4.聚合类的构造函数:
一个类既是派生类又是聚合类,其对象创建时系统先调用基类的构造函数,然后调用内嵌对象的
的构造函数,最后才是本类的构造函数.而对象消亡时,析构函数的调用顺序相反.
使用构造函数初始化列表来完成其对象的创建.
类名::类名(形参表) : 基类名(形参表),内嵌对象名(形参表){}
示例代码:
- #include"stdafx.h"
- #include <iostream>
- using namespace std;
- //Point类:点类的定义
- class Point
- {
- private:
- int x;
- int y;
- public:
- Point(int a = 0,int b = 0)
- {
- x = a;
- y = b;
- }
- void Display()
- {
- cout<<"点的坐标是:"<<x<<","<<y<<endl;
- }
- };
- class Cow
- {
- public:
- char m_Color[20];
- int m_Width;
- Cow() { }
- Cow(char Color[],int Width)
- {
- strcpy(m_Color,Color);
- m_Width = Width;
- }
- };
- //Line类的定义
- class Line
- {
- public:
- //类Line的成员属性a,b为类Point的对象
- Point a,b;
- Cow cw;
- Line() { }
- Line(char color[],int width,Point & a1,Point & b1) : cw(color,width)
- {
- a = a1;
- b = b1;
- }
- Line(Line & s)
- {
- a = s.a;
- b = s.b;
- cw = s.cw;
- }
- //显示成员属性的函数
- void Display()
- {
- a.Display();
- b.Display();
- cout<<"Color="<<cw.m_Color<<" Width="<<cw.m_Width<<endl;
- }
- };
- void main(int argc, char* argv[])
- {
- Point a;
- Point b(7.8,9.8);
- a = b;
- Line s("黄色",4,a,b);
- s.Display();
- system("pause");
- }
- (总结)C++中实现代码重用的手段----继承和聚合
- (总结)C++中实现代码重用的手段----继承和聚合
- C#中继承的代码实现方法。
- Hibernate继承和聚合的实现
- 二十四、继承(一) 代码重用、继承方式、接口继承与实现继承、继承和重定义、继承和组合
- 代码重用(继承和组合)
- 【C/C++学院】0822-类型转换函数与构造转换函数/类的继承/类的继承以及区别/继承静态成员与静态函数//继承实现代码重用/单继承QT案例/多继承简介以及实战/Gpu编程
- 实现类重用 继承和组合比较
- 利用继承进行JAVA的代码重用
- 代码重用,多重继承
- Maven 的继承和聚合
- maven的继承和聚合
- Maven的聚合和继承
- Maven的聚合和继承
- Maven的聚合和继承
- Maven的继承和聚合
- maven的继承和聚合
- maven的聚合和继承
- Seafile介绍
- 黑马程序员——Java基础——IO流(文本文件读取方式)
- 实现一个无法被继承的C++类
- js实现图片预加载 imgpreLoad.js
- Eclipse luan(Eclipse4.4)tomcat(无法显示)插件安装不了的解决方法
- (总结)C++中实现代码重用的手段----继承和聚合
- 黑马程序员——Java基础——IO流(拷贝文件)
- POJ 3080:Blue Jeans:枚举求解n个字符串的最长公共连续子串
- 纪念逝去的昨天(3)
- vitualbox archtect
- 如何将循环转为递归函数
- 为什么 Node.js 的异步 IO 具有非常好的性能
- hdu acm 2.2.1 没认真看题,未认真思考
- 匪猎遮娇怪奥烧灾粗咕瓷冶