C++:组合类

来源:互联网 发布:科比身体数据 编辑:程序博客网 时间:2024/06/06 01:16

关于代码重用:结构化程序设计中重用的代码是算法即函数代码,没有重用数据代码
在面向对象的程序设计中重用的是类的代码
1,用类定义对象
2,通过组合定义新的类(组合类)
3,通过继承定义新的类(派生类)

组合的编程原理是:程序员在定义新类的时候,使用已有的类来定义
数据成员。这些数据成员是类类型的对象,被称为类的对象成员
C++语言将数据成员中包含对象成员的类称为组合类
• 按照数据类型的不同,组合类中数据成员可分为2种,即类类型的
象成员和基本数据类型的非对象成员
• 使用组合类定义对象,即组合类对象,其成员中也将包含对象成员和
非对象成员
• 访问组合类对象中的非对象成员
组合类对象名 . 非对象成员名
• 组合类对象中的对象成员还包含自己的下级成员,也就是说组合类对
象包含多级成员。可以访问组合类对象中对象成员的下级成员,这是
一种多级访问。多级访问的语法形式是:
组合类对象名 . 对象成员名 . 对象成员的下级成员名
• 多级访问将受到多级权限的控制

TriCircle obj; // 定义1个组合类TriCircle的对象obj
TriCircle*p = &obj; // 定义1个组合类TriCircle的对象指针p,让其指向obj
// 通过对象指针p间接访问组合类对象obj中对象成员的下级函数成员
p->c0.Input( ); cout << p->c0.CArea( ) << “, ” << p->c0.CLen( ) << endl;
p->c1.Input( ); cout << p->c1.CArea( ) << “, ” << p->c1.CLen( ) << endl;
p->c2.Input( ); cout << p->c2.CArea( ) << “, ” << p->c2.CLen( ) << endl;
// 通过对象指针p间接访问组合类对象obj中的非对象成员TArea和TLen
cout << p->TArea( ) << “, ” << p->TLen( ) << endl;

组合类对象的构造与析构
– 对象的构造与析构
计算机执行定义对象语句时将创建对象,为其分配内存空间,并自动调用对象所属类的构造函数来初始化对象,这个过程就是对象的构造。当对象生存期结束时,计算机将销毁对象。销毁时自动调用对象所属类的析构函数来清理内存,然后释放其所占用的内存空间,这个过程就是对象的析构
– 组合类对象的构造与析构
• 对象成员(类类型的数据成员)
• 非对象成员(基本数据类型的数据成员

组合类对象的构造与析构
– 组合类的构造函数
组合类构造函数名(形参列表 ): 对象成员名1( 形参1), 对象成员名2( 形参2), ......
{
...... // 在函数体中初始化其它非对象成员
} –
组合类对象中各数据成员的初始化顺序是:先调用对象成员所属类的构造函数,初始化对象成员;再执行组合类构造函数的函数体,初始化其它非对象成员
– 如果组合类中有多个对象成员,那么这些对象成员的初始化顺序由其在组合类中的声明顺序决定,先声明者先初始化
组合类的析构函数
– 当对象生存期结束时,计算机销毁对象,释放其内存空间,这个过程就是对象的析构。销毁对象时计算机会自动调用其所属类的析构函数
– 组合类对象中数据成员的析构顺序是:先执行组合类析构函数的函数体,清理非对象成员;再调用对象成员所属类的析构函数,清理对象成员
– 简单地说,对象的析构顺序与构造顺序相反,即先析构非对象成员,再析构对象成员
类的组合与聚合
– 数据成员中包含对象成员的类称为组合类
– 数据成员中包含对象指针的类称为聚合类, 聚合类是一种特殊形式的组合类
• 聚合类与组合类的区别
– 聚合类的对象成员是独立创建的,聚合类对象只包含指向对象成员的指针
– 聚合类对象可以共用对象成员
组合类总结
– 代码重用。组合类是一种有效的代码重用形式。程序员在设计新类的时候应先去了解有哪些可以重用的类。这些类可以是自己以前编写的,可以是集成开发环境IDE提供的,也可以是从市场上购买的。根据功能选择自己需要的类,然后用组合的方法定义新类
– 自底向上。类可以多级组合。用零件类定义组合类,组合类可继续作为零件类去定义更大的组合类,这就是类的多级组合。多级组合是一种“自底向上”的程序设计方法。类越往上组合,其功能就越有针对性,应用面也就越窄。多级组合过程中,每一级组合类都会根据自己的功能需要设定对象成员的访问权限。有多少级组合,就有多少层封装
0 0