3.0 C++遠(yuǎn)征:is a

4-4is_a

0.派生類Soldier繼承自基類Person

//Person.h
class Person
{
public:
    Person(string name = "Jim");
    ~Person();

    void play();
protected:
    string m_strName;
};

//Soldier.h
class Soldier : public Person
{
public:
    Soldier(string name = "James", int age = 20);

    ~Soldier();

    void work();
protected:
    int m_iAge;
};

1.派生類可以給基類賦值:

//main.cpp
int main(){
    Soldier s1;
    Person p1 = s1;
  
    return 0;
}

2.基類指針可以指向派生類(派生類可以取地址給基類):

//main.cpp
int main(){
    Soldier s1;
    Person *p2 = &s1;
  
    return 0;
}

3.把基類的指針或者是基類的對象或者是基類的引用作為函數(shù)的參數(shù)來使它可以接收所傳入的子類的對象,并且也可以傳入基類的對象

void func1(Person *p){
    ......
}

void func2(Person &p){
    ......
}

//main.cpp
int main(){
    Person p1;
    Soldier s1;
    func1(&p1);     func2(p1);
    func1(&s1);     func2(s1);
  
    return 0;
}

4.基類只能接收和訪問派生類中自己有的數(shù)據(jù)成員和成員函數(shù)

//#include "Person.h"
# include "Soldier.h"

int main() {
    Soldier soldier;
    Person person;
    person = soldier;
    person.play();

    Person *p = &soldier;
    p->play();  // 使用基類聲明的對象只能調(diào)用基類的方法
    //p->work();    // 使用基類聲明的對象不能調(diào)用派生類的方法
  
    return 0;
}

5.通過基類的指針指向派生類的對象

//#include "Person.h"
#include "Soldier.h"

int main() {
    Person *pp = new Soldier;   // 基類的指針去指向派生類的內(nèi)存空間
    pp->play();
    delete pp;  // 銷毀基類的對象,執(zhí)行的是基類的析構(gòu)函數(shù),派生類的內(nèi)存并沒有釋放
    pp = NULL;
  
    return 0;
}
LOG:
Person::play()
James
Person::~Person()

6.為了防止內(nèi)存的泄漏,此時需要用virtual關(guān)鍵字修飾析構(gòu)函數(shù)。

virtual可以被繼承

給基類的析構(gòu)函數(shù)加一個關(guān)鍵字virtual,使銷毀基類的對象時,可以釋放派生類的對象的內(nèi)存

//Person.h
class Person
{
public:
    Person(string name = "Jim");
    virtual ~Person();  // virtual關(guān)鍵字修飾析構(gòu)函數(shù)

    void play();
protected:
    string m_strName;
};

LOG:
Person::play()
James
Soldier::~Soldier()
Person::~Person()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容