什么是类的组合关系
类的组合关系说通俗点就是在类里面定义另一个类,类对象和被包含的对象是同生共死,是包含关系。就相当于电脑类和CPU类的关系。
组合关系怎么用
在第一个类的成员函数中,被包含的对象可以调用自己的成员函数。第一个类的头文件必须包含第二类的头文件。
被包含的得对象初始化通过第一个对象的构造函数的初始化列表进行初始化。
如:
//computer.h
#pragma once
#include<iostream>
#include"cpu.h"
using namespace std;
class computer {
private:
int memory;
int hardDisk;
cpu ccpu;
public:
computer(int memory, int hardDisk, const char *Iname, const char *Iera);
void show();
};
//computer.cpp
#include "computer.h"
computer::computer(int memory, int hardDisk, const char *Iname, const char *Iera)
:ccpu(Iname, Iera) {
this->memory = memory;
this->hardDisk = hardDisk;
std::cout << "调用computer构造函数" << endl;
}
void computer::show() {
cout << "----------------" << endl;
cout << "内存为:" << memory << endl;
cout << "硬盘为:" << hardDisk << endl;
//咋能这样调用呢?cout << 后只能接变量,如果ccpu.show1() 改造下,返回字符串就可以
cout << "Cpu名字为:" << ccpu.show1() << endl;
cout << "硬盘代数为:" << ccpu.show2() << endl;
}
//cpu.h
#pragma once
#include<iostream>
#include<string>
class cpu {
private:
std::string Iname;
std::string Iera;
public:
cpu(const char* Iname="Intel", const char* Iera="i9");
std::string show1();
std::string show2();
};
//cpu.cpp
#include "cpu.h"
cpu::cpu(const char* Iname, const char* Iera) {
this->Iname = Iname;
this->Iera = Iera;
std::cout << "调用CPU构造函数" << std::endl;
}
std::string cpu::show1() {
//std::cout << Iname << std::endl;
return Iname;
}
std::string cpu::show2() {
//std::cout << Iera << std::endl;
return Iera;
}
//main.cpp
#include <iostream>
#include"computer.h"
void test() {
computer a(8, 1000, "因特尔", "第九代");
a.show();
}
int main() {
test();
system("pause");
}