我是靠谱客的博主 天真大炮,最近开发中收集的这篇文章主要介绍类的组合,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

类的组合

  1. 类的组合是指:类中的成员数据是另一个类的对象。
  2. 通过类的组合可以在已有的抽象的基础上实现更复杂的抽象。
    例如:在定义了点类(Point)以后,我们希望通过两个点定义一点线段,甚至还希望通过三个点定义一个三角形,或四边形等等。
  3. 类组合中的难点是关于它的构造函数设计问题。组合类中有其他类的对象作为成员,这些对象成员也成为类的内嵌对象成员。
  4. 组合类在创建对象时,它的各个内嵌对象将首先被自动创建。因此,在创建对象时既要对本类的基本数据类型数据成员进行初始化,又要对内嵌对象成员进行初始化。
  5. 组合类构造函数定义的一般形式为:
    类名::类名(总形参表):内嵌对象1(形参表),内嵌对象2(形参表),… { 类的初始化 }

示例

#include <iostream>
#include <cmath>

using namespace std;
 
class Point{
	private:
		int x,y;
	public:
		Point(int px,int py)
		{
			x=px;
			y=py;
			cout<<"Point constructor called"<<endl; //调用的点构造函数 
		}
		Point(const Point& p)
		{
			x=p.x;
			y=p.y;
			cout<<"Point copy constructor called"<<endl;  //调用的点复制构造函数 
		}
		~Point()	{	cout<<"Point destructor called"<<endl;	}		
		int getx()	{	return x;	}
		int gety()	{	return y;	}
};

class Line{
	private:
		//这里体现了类的组合:即Line类中的数据成员是另一个Point类的对象。
		//通过类的组合在已有的点抽象的基础上实现了更复杂的线段抽象。 
		Point p1,p2;  //定义了点对象p1,p2为它的私有数据成员,得以访问点对象中的成员 
		double len;
	public:
		//线段需要两个点构成,传入点对象xp1,xp2。并将它们保存到线段类的数据成员中 
		Line(const Point& xp1,const Point& xp2);  //线段复制构造函数 
		~Line()		{	cout<<"Line destructor called"<<endl;	}
		double getLen()	{return len;}
};

Line::Line(const Point& xp1,const Point& xp2):p1(xp1),p2(xp2)
{
	double x=p1.getx()-p2.getx();
	double y=p1.gety()-p2.gety();
	len=sqrt(x*x+y*y);
	cout<<"Line constructor called"<<endl;  //调用的线段复制构造函数 
}

int main()
{
	Point pa(3,4),pb(10,9);
	Line L1(pa,pb);
	cout<<"L1 start point:"<<"("<<pa.getx()<<","<<pa.gety()<<")"<<endl;
	cout<<"L1 end point:"<<"("<<pb.getx()<<","<<pb.gety()<<")"<<endl;
	cout<<"The length of L1 is:"<<L1.getLen()<<endl;
	return 0;
}

结果分析

  1. 在程序运行后,先调用Point类的构造函数两次,构造Point类对象pa和pb;
  2. 然后构造Line类对象L1,在执行L1类的构造函数之前,先调用内嵌对象的构造函数,由于内嵌对象是用已有的Point对象进行初始化的,所以调用了两次复制构造函数来完成内嵌对象的初始化;
  3. 接下来执行组合类Line的构造函数,最后输出相关信息。
  4. 程序运行到最后就开始析构对象。先析构Line对象,在析构组合类对象时,析构函数的执行顺序正好与构造函数相反。所以先执行Line类的析构函数,然后执行内嵌对象的析构函数,最后析构函数中的两个Point类对象pa和pb。

最后

以上就是天真大炮为你收集整理的类的组合的全部内容,希望文章能够帮你解决类的组合所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部