C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计
基本知识 a C++语言程序设计
在面向对象程序设计中,可以对复杂对象进行分解、抽象,把一个复杂对象分解为简单对象的组合 9.3 类的组合 在面向对象程序设计中,可以对复杂对象进行分解、抽象,把一个复杂对象分解为简单对象的组合 对于较复杂的问题可以使用类的组合来描述 采用部件组装的的方法,利用已定义的类来构成新类 类的组合(类的聚集),描述的是一个类内嵌其他类的对象作为数据成员的情况 C++语言程序设计
例如:Rectangle类的两个数据成员是Point类的对象 9.3 类的组合 例如:Rectangle类的两个数据成员是Point类的对象 它们之间的关系是一种包含与被包含的关系 带空心菱形的线表示两个类之间是包含关系 带箭头的线表示发送消息 C++语言程序设计
当创建组合类的对象时,各个内嵌对象也将被自动创建 创建组合类对象时: 9.3 类的组合 当创建组合类的对象时,各个内嵌对象也将被自动创建 创建组合类对象时: 要对本类的基本数据成员进行初始化 要对内嵌对象成员进行初始化,内嵌对象的构造函数的调用以及构造函数的参数传递,需要使用初始化列表来完成 C++语言程序设计
9.3 类的组合 组合类构造函数定义的一般形式为: 初始化列表用来完成内嵌对象的初始化 类名::类名(形参表):内嵌对象1(参数表), 内嵌对象2(参数表),… { //类的初始化 } 初始化列表用来完成内嵌对象的初始化 调用内嵌对象的构造函数以及为构造函数传递的参数 C++语言程序设计
当定义一个组合类的对象时,构造函数的调用顺序如下 9.3 类的组合 当定义一个组合类的对象时,构造函数的调用顺序如下 按照内嵌对象在组合类的声明中出现的次序,依次调用其内嵌对象的构造函数(注意:并不是按初始化列表中给出的顺序) 执行本类的构造函数的函数体 如果声明组合类的对象时没有指定对象的初始值,则自动调用无参构造函数,相应地,也调用内嵌对象的无参构造函数。 组合类的对象销毁时,析构函数的调用、执行顺序与构造函数刚好相反 C++语言程序设计
9.3 类的组合 例:类的组合应用 C++语言程序设计 //类的组合应用 #include <iostream> #include <cmath> using namespace std; class Point //Point类定义 { public: Point(int xx=0, int yy=0) {X=xx;Y=yy; cout<<"Point("<<X<<","<<Y<<") constructor"<<endl;} ~Point() {cout<<"Point("<<X<<","<<Y<<") destructor"<<endl;} int GetX() {return X;} int GetY() {return Y;} private: int X,Y; }; C++语言程序设计
9.3 类的组合 C++语言程序设计 //类的组合 class Rectangle //Rectangle类的定义 { public: //外部接口 Rectangle(int x1,int y1,int x2,int y2,int c); ~Rectangle(); int GetColor(){return color;} int GetWidth(){return abs(p1.GetX()-p2.GetX());} //求绝对值函数abs() int GetHeight(){return abs(p1.GetY()-p2.GetY());} private: //私有数据成员 Point p1,p2; //Point类的对象p1,p2 int color; }; C++语言程序设计
9.3 类的组合 C++语言程序设计 //组合类的构造函数、析构函数 Rectangle::Rectangle(int x1,int y1,int x2,int y2,int c):p1(x1,y1),p2(x2,y2) { cout<<"Rectangle构造函数被调用"<<endl; color = c; } Rectangle::~Rectangle() { cout<<"析构Rectangle对象"<<endl; C++语言程序设计
9.3 类的组合 C++语言程序设计 //主函数 void main() { //定义Rectangle类的对象 Rectangle myr(1,1,4,5, 255); cout<<"The Rectangle's color is:"; cout<<myr.GetColor()<<endl; cout<<"The Rectangle's width is:"; cout<<myr.GetWidth()<<endl; cout<<"The Rectangle's height is:"; cout<<myr.GetHeight()<<endl; } C++语言程序设计