首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 類的組合實現:Birthday 與 Student 類設計完整範例

     編輯:程式設計疑難解答

類的組合是 C++ 面向對象設計的核心機制之一,指一個類的成員變量是另一個類的對象。本文透過 Birthday(出生日期)與 Student(學生)類的組合關係,展示完整的設計與實現流程。

類設計規劃

Birthday 類

  • 屬性:year、month、day(均為 int)
  • 構造函數:預設構造、帶參構造
  • 成員變量採用 public 簡化訪問,實際項目建議 private + getter/setter

Student 類

  • 屬性:no(學號)、name(姓名)、birthday(Birthday 對象)、score(成績)
  • 構造函數重載:
    • 預設構造
    • 完整參數(學號、姓名、成績、年、月、日)
    • 組合對象參數(學號、姓名、成績、Birthday 對象)
  • 顯示方法 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;
}

關鍵知識點

  1. 組合關係:CStudent 內嵌 CBirthday 對象,生命週期與宿主類一致
  2. 構造函數初始化列表:高效初始化成員對象,避免預設構造後再賦值
  3. 參數傳遞:CBirthday 對象以 const& 傳遞避免拷貝開銷
  4. 封裝性:實際開發中成員變量應設為 private,提供存取器

此範例清晰展示了組合模式的語法與設計精髓,是掌握 C++ 類關係的優秀練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved