C++ 繼承和派生 及 學生管理範例

來源:互聯網
上載者:User

標籤:

1、概念

繼承:在定義一個新的類B時,如果該類與某個已知類A相似(指的是B擁有A的全部特點),那麼就可以把A作為一個基類,而把B作為一個衍生類別(也稱子類)。

  • 衍生類別是通過對基類進行修改和擴充得到的。在衍生類別中,可以擴充新的成員變數和成員函數。
  • 衍生類別一經定義後,可以獨立使用,不依賴於基類。
  • 衍生類別擁有基類的全部成員函數和成員變數,不論是private,protected 還是 public
  • 在衍生類別的各個成員函數中,不能訪問基類中的private成員。

2、需要繼承機制的例子 - 學生管理系統

所有的學生都有的共同屬性:

  • 姓名
  • 學號
  • 性別
  • 成績

所有的學生都有的共同方法(成員函數)

  • 是否該留級
  • 是否該獎勵

而不同的學生,又有各自不同的屬性和方法

  • 研究生:有導師和系
  • 大學生:有系
  • 中學生:有競賽特長加分

3、衍生類別的寫法

class 衍生類別名 : public 基類名 {};

 

4、衍生類別對象的記憶體空間

衍生類別對象的體積,等於基類對象的體積,再加上衍生類別對象自己的成員變數的體積。

在衍生類別對象中,包含著基類對象,而且基類對象的儲存位置位於衍生類別對象新增的成員

變數之前。如下代碼示:

#include <iostream>#include <string.h>using namespace std;class CBase {    int v1, v2;};class CDerived : public CBase {    int v3;};int main(){    printf("sizeof(CDerived) = %d\n", sizeof(CDerived));    return 0;}

輸出的結果是:12

 

5、繼承執行個體程式:學籍管理

#include <iostream>#include <string.h>using namespace std;class CStudent {private:    string name;    string id; // student number    char gender; // ‘F‘ for female, ‘M‘ for male    int age;public:    void PrintInfo() {        cout << "name: " << name << endl;        cout << "id: " << id << endl;        cout << "gender: " << gender << endl;        cout << "age: " << age << endl;    }    void SetInfo(const string & name_, const string & id_,                 int age_, char gender_) {        name = name_;        id = id_;        age = age_;        gender = gender_;    }    string GetName() { return name; }};class CUndergraduateStudnet : public CStudent{private:    string department; // 學生所屬的系public:    void QualifiedForBaoyan() {        cout << "qualified for baoyan" << endl;    }    void PrintInfo() {        CStudent::PrintInfo(); // 調用基類的PrintInfo        cout << "Department:" << department << endl;    }    void SetInfo(const string &name_, const string &id_,                 int age_, char gender_, const string & department_) {        CStudent::SetInfo(name_, id_, age_, gender_); // 調用基類的SetInfo        department = department_;    }};int main(){    CUndergraduateStudnet s2;    s2.SetInfo("Harry Potter", "115200", 20, ‘M‘, "CS");    cout<< s2.GetName() << endl;    s2.QualifiedForBaoyan();    s2.PrintInfo();    return 0;}

執行結果如下:

C++ 繼承和派生 及 學生管理範例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.