当前位置: 首页 > news >正文

C++类的组合

C++类的组合

  • 什么是类的组合
  • 初始化参数列表
    • 使用
    • 类的组合案例分析
    • 组合构造和析构顺序问题
  • this指针
      • 基本用法和作用

什么是类的组合

类的组合就是以另一个对象为数据成员,这种情况称为类的组合

1.优先使用类的组合,而不是继承
2.组合表达式的含义 一部分关系

初始化参数列表

初始化参数列表,是构造函数的另一种写法

使用

初始化参数列表的形态
构造函数名(形参1, 形参2…) : 数据成员1(形参1), 数据成员2(形参2)…

#include<iostream>
#include<string>using namespace std;class MM
{
public:MM(int age, string name) : age(age), name(name){}void printDate(){cout << age << " " << name;}private:int age;string name;
};int main()
{MM mm(19, "温柔了岁月");mm.printDate();system("pause");return 0;
}

初始化列表的其他写法

无参构造函数

#include<iostream>
#include<string>using namespace std;class MM
{
public://无参构造函数MM() : age(18), name("温柔了岁月"){}void printDate(){cout << age << " " << name;}private:int age;string name;
};int main()
{MM mm;mm.printDate();system("pause");

类的组合案例分析

1.类组合包含的类的对象,必须采用初始化参数列表的方式去初始化
2.组合中初始化参数列表的写法:
构造函数名(形参1, 形参2, 形参3,…) : 对象1(形参1, 形参2), 对象2(形参3,…)

//组合类
#include<iostream>
#include<string>using namespace std;class MM1
{
public:MM1(){cout << "MM1号" << endl;}private:int age;string name;};class MM2
{
public:MM2(){cout << "MM3号" << endl;}private:int age;string name;};class MM3
{
public:MM3(){cout << "MM3号" << endl;}private:int age;string name;
};class MM
{void show(){}
private:         //其他三个类,都放在一个类中,当做一个数据类型进行使用  MM1 mm1; MM2 mm2;MM3 mm3;
};
int main()
{MM mm;system("pause");return 0;
}

在这里插入图片描述

这是一个简单的类的组合,没有进行传参,
类的组合中,优先构造包含对象,再构造自身的对象
下面是传了形参的组合类

#include<iostream>
#include<string>using namespace std;class MM1
{
public:MM1(int age, string name){cout << "MM1号" << endl;}void printDate(){cout << "MM3号" << endl;}private:int age;string name;};class MM2
{
public:MM2(int age, string name){cout << "MM3号" << endl;}void printDate(){cout << "MM3号" << endl;}
private:int age;string name;};class MM3
{
public:MM3(int age, string name){cout << "MM3号" << endl;}void printDate(){cout << "MM3号" << endl;}private:int age;string name;
};class MM
{
public:MM(int x1,string y1, int x2, string y2, int x3, string y3): mm1(x1, y1), mm2(x2, y2),mm3(x3, y3){}void Print(){mm1.printDate();mm2.printDate();mm3.printDate();}MM1 getmm1()//访问数据成员{return mm1;}MM2 getMM2(){return mm2;}MM3 getMM3(){return mm3;}private:         //构造顺序与此处有关,与初始化列表的顺序无关MM1 mm1;MM2 mm2;MM3 mm3;
};
int main()
{MM mm(1, "温柔", 2, "了", 3, "岁月");mm.Print();//mm.getmm1().printDate();//可以这样写system("pause");return 0;
}

指针的运用(new)

#include<iostream>using namespace std;class A
{public:A(int a) : a(a){}int& getA(){return a;}
private:int a;
};class B
{
public:B(int b): b(b){}int& getB(){return b;}
private:int b;
};class C
{
public:C(){pa = new A(10);    //方法一:直接赋值pb = new B(123);}C(int a, int b) :pa(new A(10)), pb(new B(12))  //方法二,new的初始化列表{}void printDate(){cout << pa->getA() << endl;cout << pb->getB() << endl;}private:A* pa;B* pb;
};int main()
{C c;c.printDate();system("pause");return 0;
}

组合构造和析构顺序问题

1.一般构造顺序和析构顺序是相反的
2.类的组合中,优先构造包含对象,在构造自身对象
3.类的组合中,包含对象的构造顺序只和定义顺序有关,和初始化参数列表无关

this指针

任何指针都存在一个this指针,this指针只允许在类中的函数的函数中使用

避免形参名和数据成员的命名相同

基本用法和作用

this指针代表的是每个对象抽象的地址

#include<iostream>
#include<string>using namespace std;class MM
{
public:MM(int age, string name){this->age = age;   //可以用this指针来进行区分MM::name = name;  // 类加作用域,来进行区分}
private:int age;string name;
};
int main()
{system("pause");
}

其他作用
1.返回对象本身
2.返回对象地址

MM& returnMM() //返回对象本身{return *this;}MM* returnM(){return this; //返回对象地址}
http://www.lryc.cn/news/31755.html

相关文章:

  • 2.伪随机数生成器(ctr_drbg)的配置与使用
  • CentOS7 切换图形模式和多用户命令行模式
  • 在linux上用SDKMan对Java进行多版本管理
  • JSONObject、fastJson(JsonObject)、Gson(JsonObject)区别
  • 如何在CSDN中使用ChatGPT
  • 【Spring6】| GoF之工厂模式
  • 初识Node.js
  • C51---软件消抖
  • redis数据持久化
  • Java StringBuffer类
  • 电路模型和电路定律(2)——“电路分析”
  • 天琊超级进程监视器的应用试验(19)
  • 使用 Pulumi 打造自己的多云管理平台
  • 什么是MyBatis?无论是基础教学还是技术精进,你都应该看这篇MyBatis
  • 【编程基础之Python】10、Python中的运算符
  • Android的基础介绍
  • 用户登录请求100w/每天, JVM如何调优
  • C/C++每日一练(20230306)
  • 多线程的创建、Thread类、线程安全、同步、通信
  • GraphPad Prism v9.5.1.733 科研绘图软件多语言
  • 基于intel soc+fpga智能驾驶舱和高级驾驶辅助系统软件设计(三)
  • 什么?年终奖多发1块钱竟要多缴9.6W的税
  • 动态绑定右键菜单控件
  • JavaScript基础三、数据类型
  • Python 随机漫步
  • Spark SQL优化机制
  • 十五、Spring中的八大模式
  • GrabCut算法、物体显著性检测
  • 亚马逊、速卖通、lazada店铺一直不出单,没流量怎么办?
  • 深度剖析C语言符号篇