国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++類和對(duì)象-多態(tài)->多態(tài)的基本語法、多態(tài)的原理剖析、純虛函數(shù)和抽象類、虛析構(gòu)和純虛析構(gòu)

這篇具有很好參考價(jià)值的文章主要介紹了C++類和對(duì)象-多態(tài)->多態(tài)的基本語法、多態(tài)的原理剖析、純虛函數(shù)和抽象類、虛析構(gòu)和純虛析構(gòu)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

C++類和對(duì)象-多態(tài)->多態(tài)的基本語法、多態(tài)的原理剖析、純虛函數(shù)和抽象類、虛析構(gòu)和純虛析構(gòu),c++,開發(fā)語言,visualstudio

#include<iostream>
using namespace std;

//多態(tài)
//動(dòng)物類
class Animal
{
public:
?? ?//Speak函數(shù)就是虛函數(shù)
?? ?//函數(shù)前面加上virtual關(guān)鍵字,變成虛函數(shù),那么編譯器在編譯的時(shí)候就不能確定函數(shù)調(diào)用了。
?? ?virtual void speak()
?? ?{
?? ??? ?cout << "動(dòng)物在說話" << endl;
?? ?}
};
//貓類
class Cat :public Animal
{
public:
?? ?//重寫 函數(shù)返回值類型? 函數(shù)名? 參數(shù)列表? 完全相同
?? ?void speak()
?? ?{
?? ??? ?cout << "小貓?jiān)谡f話" << endl;
?? ?}
};
//狗類
class Dog :public Animal
{
public:

?? ?void speak()
?? ?{
?? ??? ?cout << "小狗在說話" << endl;
?? ?}

};
//我們希望傳入什么對(duì)象,那么就調(diào)用什么對(duì)象的函數(shù)
//如果函數(shù)地址在編譯階段就能確定,那么靜態(tài)聯(lián)編
//如果函數(shù)地址在運(yùn)行階段才能確定,就是動(dòng)態(tài)聯(lián)編

//執(zhí)行說話的函數(shù)
//地址早綁定? 在編譯階段確定函數(shù)地址
//如果想執(zhí)行讓貓說話,那么這個(gè)函數(shù)地址就不能提前綁定,需要在運(yùn)行階段進(jìn)行綁定,地址晚綁定

//動(dòng)態(tài)多態(tài)滿足條件
//1.有繼承關(guān)系
//2.子類重寫父類的虛函數(shù)

//動(dòng)態(tài)多態(tài)使用
//父類的指針或者引用? 執(zhí)向子類對(duì)象

void DoSpeak(Animal & animal)
{
?? ?animal.speak();
}
//
//多態(tài)滿足條件:
//1、有繼承關(guān)系
//2、子類重寫父類中的虛函數(shù)
//多態(tài)使用:
//父類指針或引用指向子類對(duì)象

void test01()
{
?? ?Cat cat;
?? ?DoSpeak(cat);


?? ?Dog dog;
?? ?DoSpeak(dog);
}


int main() {

?? ?test01();

?? ?system("pause");

?? ?return 0;
}

C++類和對(duì)象-多態(tài)->多態(tài)的基本語法、多態(tài)的原理剖析、純虛函數(shù)和抽象類、虛析構(gòu)和純虛析構(gòu),c++,開發(fā)語言,visualstudio

總結(jié):

多態(tài)滿足條件

* 有繼承關(guān)系
* 子類重寫父類中的虛函數(shù)

多態(tài)使用條件

* 父類指針或引用指向子類對(duì)象

重寫:函數(shù)返回值類型? 函數(shù)名 參數(shù)列表 完全一致稱為重寫

C++類和對(duì)象-多態(tài)->多態(tài)的基本語法、多態(tài)的原理剖析、純虛函數(shù)和抽象類、虛析構(gòu)和純虛析構(gòu),c++,開發(fā)語言,visualstudio

#include<iostream>
using namespace std;

//純虛函數(shù)和抽象類
class Base
{
public:
?? ?//純虛函數(shù)
?? ?//類中只要有一個(gè)純虛函數(shù)就稱為抽象類
?? ?//抽象類特點(diǎn):
?? ?//1.無法實(shí)例化對(duì)象
?? ?//2.抽象類的子類 必須重寫父類中的純虛函數(shù),否則也屬于抽象類
?? ?virtual void func() = 0;
};

class Son :public Base
{
public:
?? ?virtual void func()
?? ?{
?? ??? ?cout << "func調(diào)用" << endl;
?? ?};
};

void test01()
{
?? ?//Base b;?? //抽象類無法實(shí)例化對(duì)象
?? ?//new Base; //抽象類無法實(shí)例化對(duì)象
?? ?//Son s;//子類必須重寫父類中的純虛函數(shù),否則無法實(shí)例化對(duì)象
?? ?Base * base = new Son;
?? ?base->func();
?? ?delete base;//記得銷毀
}

int main() {

?? ?test01();

?? ?system("pause");

?? ?return 0;
}

C++類和對(duì)象-多態(tài)->多態(tài)的基本語法、多態(tài)的原理剖析、純虛函數(shù)和抽象類、虛析構(gòu)和純虛析構(gòu),c++,開發(fā)語言,visualstudio

C++類和對(duì)象-多態(tài)->多態(tài)的基本語法、多態(tài)的原理剖析、純虛函數(shù)和抽象類、虛析構(gòu)和純虛析構(gòu),c++,開發(fā)語言,visualstudio

#include<iostream>
using namespace std;
#include<string>

//虛析構(gòu)和純虛析構(gòu)
class Animal
{
public:

?? ?Animal()
?? ?{
?? ??? ?cout << "Animal 構(gòu)造函數(shù)調(diào)用!" << endl;
?? ?}
?? ?//純虛函數(shù)
?? ?virtual void Speak() = 0;

?? ?//利用虛析構(gòu)可以解決 父類指針釋放子類對(duì)象時(shí)不干凈的問題
?? ?//析構(gòu)函數(shù)加上virtual關(guān)鍵字,變成虛析構(gòu)函數(shù)
?? ?//virtual ~Animal()
?? ?//{
?? ?//?? ?cout << "Animal虛析構(gòu)函數(shù)調(diào)用!" << endl;
?? ?//}

?? ?//純虛析構(gòu)? 需要聲明也需要實(shí)現(xiàn)
?? ?//有了純虛析構(gòu) 之后,這個(gè)類也屬于抽象類,無法實(shí)例化對(duì)象
?? ?virtual ~Animal() = 0;
};

Animal::~Animal()
{
?? ?cout << "Animal 純虛析構(gòu)函數(shù)調(diào)用!" << endl;
}

//和包含普通純虛函數(shù)的類一樣,包含了純虛析構(gòu)函數(shù)的類也是一個(gè)抽象類。不能夠被實(shí)例化。

class Cat : public Animal
{
public:
?? ?Cat(string name)
?? ?{
?? ??? ?cout << "Cat構(gòu)造函數(shù)調(diào)用!" << endl;
?? ??? ?m_Name = new string(name);
?? ?}
?? ?virtual void Speak()
?? ?{
?? ??? ?cout << *m_Name <<? "小貓?jiān)谡f話!" << endl;
?? ?}
?? ?~Cat()
?? ?{
?? ??? ?cout << "Cat析構(gòu)函數(shù)調(diào)用!" << endl;
?? ??? ?if (this->m_Name != NULL)
?? ??? ?{
?? ??? ??? ?delete m_Name;
?? ??? ??? ?m_Name = NULL;
?? ??? ?}
?? ?}

public:
?? ?string * m_Name;
};

void test01()
{
?? ?Animal * animal = new Cat("Tom");
?? ?animal->Speak();

?? ?//通過父類指針去釋放,會(huì)導(dǎo)致子類對(duì)象可能清理不干凈,造成內(nèi)存泄漏
?? ?//怎么解決?給基類增加一個(gè)虛析構(gòu)函數(shù)
?? ?//虛析構(gòu)函數(shù)就是用來解決通過父類指針釋放子類對(duì)象

?? ?//父類指針在析構(gòu)時(shí)候 不會(huì)調(diào)用子類中析構(gòu)函數(shù),導(dǎo)致子類如果有堆區(qū)屬性,出現(xiàn)內(nèi)存泄露
?? ?delete animal;
}

int main() {

?? ?test01();

?? ?system("pause");

?? ?return 0;
}

總結(jié):

??? ?1. 虛析構(gòu)或純虛析構(gòu)就是用來解決通過父類指針釋放子類對(duì)象

??? ?2. 如果子類中沒有堆區(qū)數(shù)據(jù),可以不寫為虛析構(gòu)或純虛析構(gòu)

??? ?3. 擁有純虛析構(gòu)函數(shù)的類也屬于抽象類文章來源地址http://www.zghlxwxcb.cn/news/detail-830424.html

到了這里,關(guān)于C++類和對(duì)象-多態(tài)->多態(tài)的基本語法、多態(tài)的原理剖析、純虛函數(shù)和抽象類、虛析構(gòu)和純虛析構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++核心編程—類和對(duì)象,類的三大特性——封裝、繼承、多態(tài)

    C++核心編程—類和對(duì)象,類的三大特性——封裝、繼承、多態(tài)

    縱有疾風(fēng)起,人生不言棄。本文篇幅較長,如有錯(cuò)誤請(qǐng)不吝賜教,感謝支持。 ①什么是對(duì)象? 生活中有各種各樣的 事物 ,如人、動(dòng)物、植物等在C++中將這些稱為對(duì)象。 對(duì)象多種多樣, 各種對(duì)象的屬性也不相同 。 例如狗的品種,毛色,年齡等 各個(gè)對(duì)象都有自己的行為 ,例

    2024年02月07日
    瀏覽(29)
  • C++關(guān)于類和對(duì)象的基礎(chǔ)語法

    C++關(guān)于類和對(duì)象的基礎(chǔ)語法

    目錄 前言: 1.OO語言 2.類的定義 3.類的訪問限定符與封裝的引入 4.類的實(shí)例化 5.this指針(很重要) 6.this空指針問題 總結(jié): 類的訪問限定符與this指針很重要,在后面會(huì)一直用,下一章將會(huì)介紹六大默認(rèn)成員函數(shù)。 1.OO語言 談到類,就離不開對(duì)象,而像我們的c++,Java也

    2024年03月23日
    瀏覽(22)
  • C++中的多態(tài)是什么?如何實(shí)現(xiàn)多態(tài)?解釋一下C++中的虛函數(shù)和純虛函數(shù),它們的作用是什么?

    C++中的多態(tài)是什么?如何實(shí)現(xiàn)多態(tài)? 在C++中,多態(tài)(Polymorphism)是面向?qū)ο缶幊痰娜筇匦灾?,另外兩個(gè)是封裝(Encapsulation)和繼承(Inheritance)。多態(tài)指的是允許一個(gè)接口(或一個(gè)父類引用)在多種數(shù)據(jù)類型上被實(shí)現(xiàn),或者一個(gè)接口被多個(gè)不同的類以不同的方式實(shí)現(xiàn)。

    2024年02月19日
    瀏覽(34)
  • C++類和對(duì)象-多態(tài)->案例1計(jì)算器類、案例2制作飲品、案例3電腦組裝需求分析和電腦組裝具體實(shí)現(xiàn)

    C++類和對(duì)象-多態(tài)->案例1計(jì)算器類、案例2制作飲品、案例3電腦組裝需求分析和電腦組裝具體實(shí)現(xiàn)

    #includeiostream using namespace std; #includestring //分別利用普通寫法和多態(tài)技術(shù)實(shí)現(xiàn)計(jì)算器 //普通寫法 class Calculator { public: ?? ?int getResult(string oper) ?? ?{ ?? ??? ?if (oper == \\\"+\\\") { ?? ??? ??? ?return m_Num1 + m_Num2; ?? ??? ?} ?? ??? ?else if (oper == \\\"-\\\") { ?? ??? ??? ?return m_Num

    2024年02月20日
    瀏覽(26)
  • 【C++】多態(tài)原理剖析,Visual Studio開發(fā)人員工具使用查看類結(jié)構(gòu)cl /d1 reportSingleClassLayout

    【C++】多態(tài)原理剖析,Visual Studio開發(fā)人員工具使用查看類結(jié)構(gòu)cl /d1 reportSingleClassLayout

    author:Carlton tag:C++ topic:【C++】多態(tài)原理剖析,Visual Studio開發(fā)人員工具使用查看類結(jié)構(gòu)cl /d1 reportSingleClassLayout website:黑馬程序員C++ tool:Visual Studio 2019 date:2023年7月24日 ? 目錄 父類使用虛函數(shù)前后類內(nèi)部結(jié)構(gòu)變化 子類重寫父類虛函數(shù)的作用及其機(jī)理 ? ? ? ? 首先父類成員

    2024年02月15日
    瀏覽(92)
  • 【C++庖丁解?!棵嫦?qū)ο蟮娜筇匦灾欢鄳B(tài) | 抽象類 | 多態(tài)的原理 | 單繼承和多繼承關(guān)系中的虛函數(shù)表

    【C++庖丁解?!棵嫦?qū)ο蟮娜筇匦灾欢鄳B(tài) | 抽象類 | 多態(tài)的原理 | 單繼承和多繼承關(guān)系中的虛函數(shù)表

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫等等一系列知識(shí) ??感謝你的陪伴與支持 ,故事既有了開頭,就要畫上一個(gè)完美的句號(hào),讓我們一起加油 需要聲明的,本節(jié)課件中的代碼及解釋都是在vs2013下的x86程序中,涉及的指針都是4bytes。如果要其他平臺(tái)

    2024年04月10日
    瀏覽(28)
  • 深度剖析java類和對(duì)象

    深度剖析java類和對(duì)象

    個(gè)人主頁:兜里有顆棉花糖 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【JavaSE_primary】 在Java中,一切皆對(duì)象。 在Java中,我們通過類來描述對(duì)象。 類的定義:Java類是面向?qū)ο缶幊讨械幕緲?gòu)建模塊, 用于描述對(duì)象的屬性(成員變量)和行

    2024年02月10日
    瀏覽(27)
  • Python-面向?qū)ο螅好嫦驅(qū)ο蟆⒊蓡T方法 、類和對(duì)象、構(gòu)造方法、魔術(shù)方法、封裝、繼承、類型注解、多態(tài)(抽象類(接口))

    Python-面向?qū)ο螅好嫦驅(qū)ο?、成員方法 、類和對(duì)象、構(gòu)造方法、魔術(shù)方法、封裝、繼承、類型注解、多態(tài)(抽象類(接口))

    當(dāng)前版本號(hào)[20230806]。 版本 修改說明 20230806 初版 生活中數(shù)據(jù)的組織 學(xué)校開學(xué),要求學(xué)生填寫自己的基礎(chǔ)信息,一人發(fā)一張白紙,讓學(xué)生自己填, 易出現(xiàn)內(nèi)容混亂 但當(dāng)改為登記表,打印出來讓學(xué)生自行填寫, 就會(huì)整潔明了 程序中數(shù)據(jù)的組織 在程序中簡單使用變量來記錄學(xué)

    2024年02月14日
    瀏覽(22)
  • 虛函數(shù)、純虛函數(shù)、多態(tài)

    虛函數(shù)、純虛函數(shù)、多態(tài)

    ????????在基類的函數(shù)前加上virtual,在派生類中重寫該函數(shù),運(yùn)行時(shí)將會(huì)根據(jù)所指對(duì)象的實(shí)際類型來調(diào)用相應(yīng)的函數(shù),如果對(duì)象類型是派生類,就調(diào)用派生類的函數(shù),如果對(duì)象類型是基類,就調(diào)用基類的函數(shù)。 注意:如果子類沒有重寫虛函數(shù),那么子類對(duì)象仍然有

    2024年02月09日
    瀏覽(20)
  • 【JavaSE語法】類和對(duì)象(一)

    【JavaSE語法】類和對(duì)象(一)

    1.1 什么是面向?qū)ο?Java是一門純面向?qū)ο蟮恼Z言(Object Oriented Program,簡稱 OOP ),在面向?qū)ο蟮氖澜缋铮磺薪詾閷?duì)象。面向?qū)ο笫墙鉀Q問題的一種思想,主要 依靠對(duì)象之間的交互完成一件事情 1.2 面向?qū)ο笈c面向過程 注意:面向過程和面相對(duì)象并不是一門語言,而是解決問

    2024年02月05日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包