c++学习之类的组合、聚合
来源:互联网 发布:mac os 10.12.6怎么样 编辑:程序博客网 时间:2024/05/31 19:29
8.2类的组合
- 使用组合类定义对象,即组合类对象,其成员中也将包含对象成员和非对象成员
2.访问组合类对象中的非对象成员
组合类对象名 . 非对象成员名
•组合类对象中的对象成员还包含自己的下级成员,也就是说组合类对象包含多级成员。可以访问组合类对象中对象成员的下级成员,这是一种多级访问。多级访问的语法形式是:
组合类对象名 . 对象成员名 . 对象成员的下级成员名
•多级访问将受到多级权限的控制
组合类对象的构造与析构
3.–组合类的构造函数
组合类构造函数名( 形参列表 ) : 对象成员名1( 形参1 ), 对象成员名2( 形参2 ), ……
{
…… // 在函数体中初始化其它非对象成员
}
–组合类对象中各数据成员的初始化顺序是:先调用对象成员所属类的构造函数,初始化对象成员;再执行组合类构造函数的函数体,初始化其它非对象成员
–如果组合类中有多个对象成员,那么这些对象成员的初始化顺序由其在组合类中的声明顺序决定,先声明者先初始化
组合类TriCircle可添加如下3个重载构造函数
–有参构造函数
TriCircle :: TriCircle( double p0, double p1, double p2 ) : c0(p0), c1(p1), c2(p2){ }
–无参构造函数。
TriCircle :: TriCircle( ) { }
–拷贝构造函数
TriCircle :: TriCircle( TriCircle &rObj ) : c0(rObj.c0), c1(rObj.c1), c2(rObj.c2) { }TriCircle obj( 5, 2, 3 );TriCircle obj1;TriCircle obj2( obj );
组合类的析构函数
–当对象生存期结束时,计算机销毁对象,释放其内存空间,这个过程就是对象的析构。销毁对象时计算机会自动调用其所属类的析构函数
–组合类对象中数据成员的析构顺序是:先执行组合类析构函数的函数体,清理非对象成员;再调用对象成员所属类的析构函数,清理对象成员
–简单地说,对象的析构顺序与构造顺序相反,即先析构非对象成员,再析构对象成员
类的聚合
例8-3 聚合类pTriCircle的定义代码
类头文件:pTriCircle.h
类源程序文件:pTriCircle.cpp
#include “Circle.h” // 声明类Circleclass pTriCircle // 声明部分,即声明成员{public:Circle *p0, *p1, *p2; // 公有Circle类的对象指针double TArea( ); // 求总面积:公有函数成员double TLen( ); // 求总周长:公有函数成员};#include “pTriCircle.h” // 声明类pTriCirclepTriCircle类:实现部分,具体的函数代码double pTriCircle :: TArea( ) // 求总面积{double totalArea;totalArea = p0->CArea( ) +p1->CArea( ) + p2->CArea( );return totalArea;}double pTriCircle :: TLen( ) // 求总周长{double totalLen;totalLen = p0->CLen ( ) +p1->CLen( ) + p2->CLen( );return totalLen;}#include <iostream>using namespace std;#include “pTriCircle.h” // 类pTriCircle的声明头文件 main( ){Circle c0, c1, c2; // 先定义3个类Circle的对象c0、c1、c2c0.Input( ); c1.Input( ); c2.Input( ); // 输入3个圆的半径pTriCircle obj1; // 定义1个聚合类pTriCircle的对象obj1// 将obj1中3个对象指针分别指向已经创建的Circle类对象c0、c1、c2obj1.p0 = &c0; obj1.p1 = &c1; obj1.p2 = &c2;// 调用obj1中的函数成员TArea和TLen,计算并显示总面积和总周长cout << obj1.TArea( ) << “, ” << obj1.TLen( ) << endl;pTriCircle obj2; // 定义1个聚合类pTriCircle的对象obj2// 将obj2中3个对象指针也分别指向Circle类对象c0、c1、c2obj2.p0 = &c0; obj2.p1 = &c1; obj2.p2 = &c2;// 调用obj2中的函数成员TArea和TLen,计算并显示总面积和总周长cout << obj2.TArea( ) << “, ” << obj2.TLen( ) << endl;return 0;}
类的组合与聚合
–数据成员中包含对象成员的类称为组合类
–数据成员中包含对象指针的类称为聚合类,聚合类是一种特殊形式的组合类
•聚合类与组合类的区别
–聚合类的对象成员是独立创建的,聚合类对象只包含指向对象成员的指针
–聚合类对象可以共用对象成员
- c++学习之类的组合、聚合
- C++之类的组合(聚合)
- 学习C++(1)之类的拷贝构造
- 组合聚合的区别
- Rhyme/ Java 设计模式之类与类之间的关系—依赖、关联(聚合与组合)、继承、实现
- 组合,关联,聚合的区别
- 组合,关联,聚合的区别
- 聚合和组合的区别
- 组合与聚合的关系
- 组合,关联,聚合的区别
- 组合,关联,聚合的区别
- 组合,关联,聚合的区别
- 聚合和组合的区别
- 组合,关联,聚合的区别
- 组合,关联,聚合的区别
- 聚合和组合的区别
- 组合,关联,聚合的区别
- 关联,聚合,组合的区别
- CDocTemplate::GetDocString
- STM32实验1:定时器中断同时产生两路不同频率的信号
- 数据库的视图与索引——自学篇
- Android开源项目LoopViewPage使用
- sql server 2012导出mdb文件或者.accdb文件扩展名
- c++学习之类的组合、聚合
- ContextMenu菜单详解
- Spring自动装配
- keepalived + redis高可用方案
- Unity(2017版本)嵌入现有iOS工程
- nginx 辅助 同一个tomcat绑定多个二级域名及辅助多个tomcat绑定多个二级域名
- Effective C++ 2. Prefer consts, enums, and inlines to #defines
- 论CSS3 transform、translate、transition、animation
- c++学习之类的继承与派生