C++类和对象——(8)类的组合

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
人生就像骑单车,想保持平衡就得往前进!

一起加油!

目录

一、什么是类的组合:

二、类组合中的难点是关于它的构造函数设计问题。 

三、例:类的组合,线段类 

🔑说明: 

四、 总结:

五、共勉:


一、什么是类的组合:

        类的组合是指:类中的成员数据是另一个类的对象通过类的组合可以在已有的抽象的基础上实现更复杂的抽象。

二、类组合中的难点是关于它的构造函数设计问题。 

        组合类中有其他类的对象作为成员,这些对象成员也称为类的内嵌对象成员组合类在创建对象时,它的各个内嵌对象将首先被自动创建。因此,在创建对象时既要对本类的基本数据类型数据成员进行初始化,又要对内嵌对象成员进行初始化。组合类构造函数定义的一般形式为:

        类名::类名(总形参表):内嵌对象1 (形参表),内嵌对象 2(形参表),……

{

                                                类的初始化 

   }

三、例:类的组合,线段类 

#include<iostream>
#include<cmath>
using  namespace std;
class Point{
	private:
		int x;
		int y;
	public:
		Point(int px,int py):x(px),y(py){
			cout<<"Point constructor called"<<endl;
		}
		~Point(){
			cout<<"Point destructor called"<<endl;
		}
		Point(const Point&p){
			x=p.x;
			y=p.y;
			cout<<"Point copy constructor called"<<endl;
		}
		int getx(){
			return x;
		} 
		int gety(){
			return y;
		}
};

class Line{
	private:
		Point p1,p2;
		double len;
	public:
		Line(Point &xp1,Point &xp2);
		~Line(){
			cout<<"Line destructor called"<<endl;
		}
		double getlen(){
			return len;
		}
};

Line::Line(Point &xp1,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 a(3,4),b(10,9);
	Line ab(a,b);
	cout<<"a start point"<<"("<<a.getx()<<","<<a.gety()<<")"<<endl;
	cout<<"b start point"<<"("<<b.getx()<<","<<b.gety()<<")"<<endl;
	cout<<"The length of the ab is:"<<ab.getlen()<<endl;
	return 0;
}

🔑说明: 

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

四、 总结:

  • 类中的成员数据是另一个类的对象
  • 通过类的组合可以在已有的抽象的基础上实现更复杂的抽象。
  • 组合类中有其他类的对象作为成员,这些对象成员也称为类的内嵌对象成员
  • 在创建对象时既要对本类的基本数据类型数据成员进行初始化,又要对内嵌对象成员进行初始化。

五、共勉:

        以上就是我对C++类和对象——(8)类的组合的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对类和对象的理解,请持续关注我哦!!! 

  • 35
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梵豪

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值