-
#include <iostream> #include <stdlib.h> #include <string> using namespace std; /** * 定義人類: Person * 數據成員: m_strName * 成員函數: attack() */ class Person { public: string m_strName; void attack() { cout << "attack" << endl; } }; /** * 定義士兵類: Soldier * 士兵類公有繼承人類 * 數據成員: m_strName * 成員函數: attack() */ class Soldier:public Person { public: string m_strName; void attack() { cout << "fire!!!" << endl; } }; int main(void) { // 實例士兵對象 Soldier soldier; // 向士兵屬性賦值"tomato" soldier.m_strName = "tomato"; // 通過士兵對象向人類屬性賦值"Jim" soldier.Person::m_strName = "Jim"; // 打印士兵對象的屬性值 cout << soldier.m_strName << endl; // 通過士兵對象打印人類屬性值 cout << soldier.Person::m_strName << endl; // 調用士兵對象方法 soldier.attack(); // 通過士兵對象調用人類方法 soldier.Person::attack(); return 0; }查看全部
-
父子關系 成員同名 隱藏; 同名函數,訪問隱藏方法:對象.父類::隱藏成員(同名成員);//soldier.Person::play(); 同名數據成員,父類::同名數據成員;//Person::code;查看全部
-
繼承關系查看全部
-
私有繼承private查看全部
-
保護繼承查看全部
-
公有繼承public查看全部
-
公有繼承 class A:public B 保護繼承 class A:protected B 私有繼承 class A:private B查看全部
-
基類--派生類 父類--子類查看全部
-
實例化一個子類,先實例化父類,再實例化子類,父類的實例化是隱性的。 析構函數和實例化是相反的,析構一個子類,先析構子類再析構父類。 實例化子類以后,可以訪問父類和本身的成員和成員函數。查看全部
-
派生類《-》基類 子類《-》父類查看全部
-
子類的對象可以賦給父類; 可以用基類的指針指向派生類的對象;查看全部
-
父子關系 成員同名 隱藏; 同名函數,訪問隱藏方法:對象.父類::隱藏成員(同名成員);//soldier.Person::play(); 同名數據成員,父類::同名數據成員;//Person::code;查看全部
-
實例化一個子類,先實例化父類,再實例化子類 析構一個子類,先析構子類,再析構父類查看全部
-
虛析構函數: 當父類的對象是指針類型時,可以指向子類的對象,在析構時,要用虛析構函數,否則只能對父類進行析構,不能對子類析構!查看全部
-
注意:派生類的對象可以賦值給基類,但是基類的對象是不可以賦值給派生類的; 基類和派生類是is-a的關系; 子類對象可以對父類對象初始化; 父類的指針對象可以指向子類的對象,可以父類的指針對象只能訪問子類中從父類繼承的成員;查看全部
舉報
0/150
提交
取消