類的組合(Class Composition)
類的組合是一種“has-a”關(guān)系,指一個類的對象中可以包含其他類的對象作為其成員。組合在面向?qū)ο缶幊讨惺且环N常用的設(shè)計策略,用于構(gòu)建復(fù)雜的系統(tǒng)。
1. 類的組合
- 概念:組合是指一個類的對象包含另一個類的對象作為其成員,這表明一種整體與部分的關(guān)系。
- 語法:
class Component { // 成員和方法 }; class Composite { private: Component part; public: Composite() { // Composite的構(gòu)造函數(shù) } void function() { part.function(); // 使用內(nèi)部的Component對象 } }; - 特點:組合使得Composite類可以管理Component對象的生命周期,并可以控制對Component對象的訪問。
示例代碼:
#include <iostream>
#include <string>
class Person {
public:
Person(const std::string& name) : name(name) {}
void speak() const {
std::cout << name << " says hello!" << std::endl;
}
private:
std::string name;
};
class Classroom {
public:
Classroom(const std::string& courseName, const Person& teacher)
: courseName(courseName), teacher(teacher) {}
void startLesson() const {
std::cout << "Starting " << courseName << std::endl;
teacher.speak();
}
private:
std::string courseName;
Person teacher; // Person對象作為Classroom的成員
};
int main() {
Person teacher("Kimi");
Classroom classroom("C++ Programming", teacher);
classroom.startLesson();
return 0;
}
2. 構(gòu)造函數(shù)的調(diào)用順序
- 概念:在組合中,當(dāng)創(chuàng)建包含其他對象的類的對象時,需要調(diào)用這些成員對象的構(gòu)造函數(shù)來初始化它們。
- 特點:成員對象的構(gòu)造函數(shù)在包含對象的構(gòu)造函數(shù)中通過初始化列表調(diào)用,調(diào)用順序是根據(jù)它們在類定義中出現(xiàn)的順序。
示例代碼:
#include <iostream>
#include <string>
class Engine {
public:
Engine() {
std::cout << "Engine constructed" << std::endl;
}
~Engine() {
std::cout << "Engine destroyed" << std::endl;
}
};
class Car {
private:
Engine engine;
public:
Car() : engine() { // Engine的構(gòu)造函數(shù)通過初始化列表調(diào)用
std::cout << "Car constructed" << std::endl;
}
~Car() {
std::cout << "Car destroyed" << std::endl;
}
};
int main() {
Car car; // 調(diào)用Car的構(gòu)造函數(shù),進(jìn)而調(diào)用Engine的構(gòu)造函數(shù)
return 0;
}
在這個示例中,當(dāng)Car對象被創(chuàng)建時,首先會調(diào)用Engine對象的構(gòu)造函數(shù),然后調(diào)用Car的構(gòu)造函數(shù)。對象的銷毀順序與構(gòu)造順序相反,即首先銷毀Car對象,然后是Engine對象。
類的組合是一種強大的設(shè)計模式,它允許開發(fā)者通過構(gòu)建和管理對象之間的關(guān)系來設(shè)計靈活和可重用的類。正確的構(gòu)造函數(shù)和析構(gòu)函數(shù)的編寫確保了成員對象的正確初始化和清理。
作者:
hwaityd
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須在文章頁面給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
浙公網(wǎng)安備 33010602011771號