類的組合是 C++ 面向對象設計的核心機制之一,指一個類的成員變量是另一個類的對象。本文透過 Birthday(出生日期)與 Student(學生)類的組合關係,展示完整的設計與實現流程。
year、month、day(均為 int)public 簡化訪問,實際項目建議 private + getter/setterno(學號)、name(姓名)、birthday(Birthday 對象)、score(成績)disp() 輸出所有信息#include
#include
using namespace std;
class CBirthday {
public:
int m_nYear, m_nMonth, m_nDay;
CBirthday() : m_nYear(1990), m_nMonth(9), m_nDay(25) {}
CBirthday(int y, int m, int d) : m_nYear(y), m_nMonth(m), m_nDay(d) {}
};
class CStudent {
private:
string m_strNo;
string m_strName;
CBirthday m_Birthday; // 組合關係:Student 擁有 Birthday
int m_nScore;
public:
CStudent() : m_strNo("110110"), m_strName("李二狗"), m_nScore(0) {}
CStudent(const string& no, const string& name, int score,
int y, int m, int d)
: m_strNo(no), m_strName(name), m_nScore(score),
m_Birthday(y, m, d) {}
CStudent(const string& no, const string& name, int score,
const CBirthday& birthday)
: m_strNo(no), m_strName(name), m_nScore(score),
m_Birthday(birthday) {}
void Disp() {
cout << "姓名:" << m_strName << endl;
cout << "學號:" << m_strNo << endl;
cout << "生日:" << m_Birthday.m_nYear << "-"
<< m_Birthday.m_nMonth << "-" << m_Birthday.m_nDay << endl;
cout << "成績:" << m_nScore << endl;
}
};
int main() {
CBirthday d(2002, 1, 1);
CStudent s1;
CStudent s2("102", "AAA", 98, 2001, 1, 1);
s1.Disp();
s2.Disp();
CStudent s3("103", "BBB", 90, d);
s3.Disp();
return 0;
}
CStudent 內嵌 CBirthday 對象,生命週期與宿主類一致CBirthday 對象以 const& 傳遞避免拷貝開銷private,提供存取器此範例清晰展示了組合模式的語法與設計精髓,是掌握 C++ 類關係的優秀練習。