C 第八節 子類的三大件

2021-07-04 08:46:13 字數 2881 閱讀 9376

子類的三大件

1.1 子類建構函式中,呼叫父類建構函式,對來自父類的那部分成員進行初始化,再初始化自己擴充套件的成員

1.2 誰的成員,歸誰初始化,子類無需重複完成父類部分的工作

1.3 父類建構函式放在初始化列表

1.4 如果在子類的建構函式中,不顯式的呼叫父類建構函式,將自動呼叫父類的預設建構函式(前提是有預設建構函式)

1.5 如果在子類的建構函式內部,呼叫父類建構函式,會建立乙個區域性的base物件,而子類物件自己的成員並沒有被引數初始化

1.6 析構函式無需引數,在子類的析構函式中,父類的析構函式將被自動呼叫

1.7 在拷貝建構函式裡,也是父類成員歸父類初始化

1.8 構造子類時,先父類後子類;析構子類時,先子類後父類

base.h

#ifndef __c__no805class__base2__

#define __c__no805class__base2__

#include #include using namespace std;

class base2

;#endif /* defined(__c__no805class__base2__) */

base.cpp

#include "base2.h"

base2::base2(int a, char * s)

base2::base2(const base2 & b)

base2::~base2()

cout << "base 析構函式" << endl;

}const base2 & base2::operator = (const base2 & b)

cout << "base 過載賦值運算子" << endl;

return *this;

}void base2::print()

;#endif /* defined(__c__no805class__derived2__) */

derived.cpp

#include "derived2.h"

//子類建構函式中,呼叫父類建構函式,對來自父類的那部分成員進行初始化,再初始化自己擴充套件的成員

//誰的成員,歸誰初始化,子類無需重複完成父類部分的工作

//父類建構函式放在初始化列表

//如果在子類的建構函式中,不顯式的呼叫父類建構函式,將自動呼叫父類的預設建構函式(前提是有預設建構函式)

derived2::derived2(int a, char * s, float x, char * t) : base2(a, s)

//在拷貝建構函式裡,也是父類成員歸父類初始化

derived2::derived2(const derived2 & d) : base2(d)

derived2::~derived2() //析構函式無需引數,在子類的析構函式中,父類的析構函式將被自動呼叫

cout << "derived 析構函式" << endl;

}const derived2 & derived2::operator = (const derived2 & d)

return *this;

}void derived2::printd()

father、son、grandson

father.h

#ifndef __c__no805class__father__

#define __c__no805class__father__

#include using namespace std;

class father

;#endif /* defined(__c__no805class__father__) */

father.cpp

#include "father.h"

father::father(char *n, int *b, int g)

father::father (const father & f)

;#endif /* defined(__c__no805class__son__) */

son.cpp

#include "son.h"

son::son(char *n, int *b, int g, char* a, int *gf, double s) : father(n, b, g)

;#endif /* defined(__c__no805class__grandson__) */

grandson.cpp

#include "grandson.h"

grandson::grandson(char *n, int *b, int g, char* a, int *gf, double s, char *d, int son) : son(n, b, g, a, gf, s)

grandson::grandson (const grandson & g) : son(g)

const grandson & grandson::operator = (const grandson & g)

cout << "grandson過載賦值運算子" << endl;

return *this;

}grandson::~grandson()

cout << "析構grandson" << endl;

}void grandson::print()

main.cpp

#include "grandson.h"

int main()

Python第八節 檔案的操作

1 檔案開啟的格式 file open file name mode buffering 下表為 open 函式支援的檔案開啟模式 模式意義 r唯讀模式開啟檔案,讀檔案內容的指標會放在檔案的開頭。rbr 開啟檔案後,既可以從頭讀取檔案內容,也可以從開頭向檔案中寫入新的內容,寫入的新內容會覆蓋檔案中等...

第八節 企業應用PDM的步驟

第八節 企業應用pdm的步驟 和任何一件事情一樣,企業在應用pdm方面也需要有計畫有步驟地進行。投資pdm軟體的實施應用,對任何乙個企業來說,都不是一件小事情,因此更需要慎重行事。一般來說,企業在應用pdm的基本步驟如下 1 全面認識pdm。企業自身有哪些方面的問題需要解決,企業對pdm系統實施的期...

第八節 Array的遍歷 轉換以及 常規用法

scala var intarray array 1,2,3 intarray array int array 1,2,3 to length 1 scala for i 0 to intarray.length 1 12 3 until 小於length scala for i 0 until i...