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

C++類和對(duì)象——多態(tài)詳解

這篇具有很好參考價(jià)值的文章主要介紹了C++類和對(duì)象——多態(tài)詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1.多態(tài)的基本語法

2.多態(tài)的原理剖析

示例:計(jì)算機(jī)類?

3.純虛函數(shù)和抽象類

示例:制作飲品

4.虛析構(gòu)和純虛析構(gòu)?

示例:電腦組裝


1.多態(tài)的基本語法

C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

代碼示例:

#include<bits/stdc++.h>
using namespace std;

class music
{
public:
//加virtual實(shí)現(xiàn)晚綁定
	virtual void listen()
	{
		cout << "listen music" << endl;
	}
};

class rock : public music
{
public:
	void listen()
	{
		cout << "listen rock" << endl;
	}
};

//不加virtual是地址早綁定
//如果想要聽rock就應(yīng)該讓地址晚綁定,或者說在運(yùn)行階段進(jìn)行綁定
void dolisten(music &m)
{
	m.listen();
}

int main()
{
	rock r;
	dolisten(r);
	
	return 0;
}

?C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

2.多態(tài)的原理剖析

空類的大小為1?

加了virtual后會(huì)變?yōu)?或8個(gè)字節(jié),這恰好是一個(gè)指針的大小

#include<bits/stdc++.h>
using namespace std;

class music
{
public:
//加virtual實(shí)現(xiàn)晚綁定
	virtual void listen()
	{
		cout << "listen music" << endl;
	}
};

class rock : public music
{
public:
	void listen()
	{
		cout << "listen rock" << endl;
	}
};

//不加virtual是地址早綁定
//如果想要聽rock就應(yīng)該讓地址晚綁定,或者說在運(yùn)行階段進(jìn)行綁定
void dolisten(music &m)
{
	m.listen();
}

int main()
{
	rock r;
	cout << sizeof(rock) << endl;
	
	return 0;
}

C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)?

vfptr是一個(gè)虛函數(shù)(表)指針

當(dāng)子類重寫父類的虛函數(shù),子類中的虛函數(shù)表位置會(huì)替換成子類的虛函數(shù)地址

簡(jiǎn)單理解:就是父類會(huì)將它的函數(shù)繼承給它的子類,但當(dāng)子類使用virtual(多態(tài)后)會(huì)將父類繼承給它的覆蓋掉

多態(tài)使用條件:父類的指針或者引用指向子類對(duì)象

示例:計(jì)算機(jī)類?

C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

#include<bits/stdc++.h>
using namespace std;

class calculator
{
public:

	virtual int getresult()
	{
		return 0;
	}
	
	int x;
	int y;
};

class addcalculator : public calculator
{
public:

	int getresult()
	{
		return x + y;
	}
};

class subcalculator : public calculator
{
public:

	int getresult()
	{
		return x - y;
	}
};

int main()
{
	//多態(tài)實(shí)現(xiàn)計(jì)算機(jī)的加法和減法
	calculator *c = new addcalculator;
	c -> x = 50,c -> y = 60;
	cout << c -> getresult() << endl;
	delete c;
	
	c = new subcalculator;
	c -> x = 60,c -> y = 50;
	cout << c -> getresult() << endl;
	delete c;
	
	return 0;
}

?C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

3.純虛函數(shù)和抽象類

?

?

#include<bits/stdc++.h>
using namespace std;

class base
{
public:
	
	virtual void func() = 0;
};

class son : public base
{
public:

	virtual void func()
	{
		cout << "func函數(shù)調(diào)用" << '\n';
	}
};

int main()
{
	base *b = new son;
	b -> func();
	delete b;
	
	return 0;
}

?C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

示例:制作飲品

?

#include<bits/stdc++.h>
using namespace std;

class drinking
{
public:

	//煮水
	virtual void boil() = 0;
	
	//沖泡
	virtual void brew() = 0;
	
	//倒入杯中
	virtual void pourintocup() = 0;
	
	//加入佐料
	virtual void addseasoning() = 0;
	
	//制作飲品
	void makedrinking()
	{
		boil();
		brew();
		pourintocup();
		addseasoning();
	}
};

class coffee : public drinking
{
public:
	//煮水
	virtual void boil(){
		cout << "燒開水" << endl;
	}
	
	//沖泡
	virtual void brew(){
		cout << "加咖啡粉" << endl;
	}
	
	//倒入杯中
	virtual void pourintocup(){
		cout << "倒入杯中" << endl;
	}
	
	//加入佐料
	virtual void addseasoning(){
		cout << "加糖,加牛奶" << endl;
	}
	
};

void make(drinking *d)
{
	d -> makedrinking();
	delete d;
}

int main()
{
	//開始做咖啡
	make(new coffee);
	
	return 0;
}

?C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

4.虛析構(gòu)和純虛析構(gòu)?

C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

#include<bits/stdc++.h>
using namespace std;

class animal
{
public:
	animal()
	{
		cout << "animal構(gòu)造函數(shù)調(diào)用" << endl;
	}
	
	//利用虛析構(gòu)解決父類指針釋放子類對(duì)象時(shí)不干凈的問題
	// virtual ~animal()
	// {
		// cout << "animal虛析構(gòu)函數(shù)調(diào)用" << endl;
	// }
	
	virtual ~animal() = 0;
	
	//純虛析構(gòu),需要聲明也需要實(shí)現(xiàn)
	//有了純虛析構(gòu)之后,這個(gè)類也屬于抽象類,無法實(shí)例化對(duì)象
	virtual void speak() = 0;
};

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

class cat : public animal
{
public:
	cat(string name)
	{
		cout << "cat構(gòu)造函數(shù)調(diào)用" << endl;
		this -> name = new string(name);
	}
	
	virtual void speak()
	{
		cout << *name << "在說話" << endl;
	}
	~cat()
	{
		cout << "cat析構(gòu)函數(shù)調(diào)用" << endl;
		if(name != NULL)
		{
			delete name;
			name = NULL;
		}
	}
	string *name;
};

int main()
{
	animal *a = new cat("Tom");
	a -> speak();
	delete a;
	
	return 0;
}

C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)?

?C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)文章來源地址http://www.zghlxwxcb.cn/news/detail-835857.html

示例:電腦組裝

C++類和對(duì)象——多態(tài)詳解,c++,類和對(duì)象,開發(fā)語言,多態(tài)

#include<bits/stdc++.h>
using namespace std;

class cpu
{
public:

	virtual void calculator() = 0;
};

class videocard
{
public:

	virtual void display() = 0;
};

class memory
{
public:

	virtual void storage() = 0;
};

class computer
{
public:

	computer(cpu *c,videocard *v,memory *m)
	{
		this -> c = c;
		this -> v = v;
		this -> m = m;
	}
	
	void make()
	{
		c -> calculator();
		v -> display();
		m -> storage();
	}
	
	~computer()
	{
		if(c != NULL)
		{
			delete c;
			c = NULL;
		}
		
		if(v != NULL)
		{
			delete v;
			v = NULL;
		}
		
		if(m != NULL)
		{
			delete m;
			m = NULL;
		}
	}
	
private:

	cpu *c;
	videocard *v;
	memory *m;
};

class intelcpu : public cpu
{
public:

	virtual void calculator()
	{
		cout << "intelcpu" << endl;
	}
};

class amd : public videocard
{
public:

	virtual void display()
	{
		cout << "amdvideocard" << endl;
	}
};

class kingston : public memory
{
public:

	virtual void storage()
	{
		cout << "kingstonmemory" << endl;
	}
};

int main()
{
	cpu *c = new intelcpu;
	videocard *v = new amd;
	memory *m = new kingston;
	
	computer *com = new computer(c,v,m);
	com -> make();
	delete com;
	
	return 0;
}

?

到了這里,關(guān)于C++類和對(duì)象——多態(tài)詳解的文章就介紹完了。如果您還想了解更多內(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)->案例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++】面向?qū)ο?--多態(tài)(萬字詳解)

    【C++】面向?qū)ο?--多態(tài)(萬字詳解)

    ??? ??????? 歡迎來到小林的博客!! ?????????博客主頁:??小林愛敲代碼 ?????????文章專欄:??小林的C++之路 ?????????歡迎關(guān)注:??點(diǎn)贊??收藏??留言 ??????今天給大家講解多態(tài),多態(tài)是面向?qū)ο蟮囊粋€(gè)重要內(nèi)容。也非

    2024年02月01日
    瀏覽(55)
  • 詳解C++類和對(duì)象(下篇)

    詳解C++類和對(duì)象(下篇)

    目錄 一,再談構(gòu)造函數(shù) ?1.1 構(gòu)造函數(shù)體賦值 ?1. 2 初始化列表? 1.21 自定義類型成員? 1.22 ?const 成員變量 1.23?引用成員變量?? 1. 24 初始化列表的“坑” 1. 3 explicit ? 二,static 成員 2.1 概念? 2.2 特性? 三, 友元 3. 1 友元函數(shù) 3. 2 友元類? 特點(diǎn):? 3. 3 內(nèi)部類(了解)

    2024年02月04日
    瀏覽(31)
  • C++類和對(duì)象基礎(chǔ)知識(shí)詳解

    C++類和對(duì)象基礎(chǔ)知識(shí)詳解

    1.一切皆是對(duì)象。如下圖: ·女人是一個(gè)對(duì)象 ·鞋子是一個(gè)對(duì)象 ·包包是一個(gè)對(duì)象 ·衣服是一個(gè)對(duì)象 ·褲子是一個(gè)對(duì)象 ·手鏈?zhǔn)且粋€(gè)對(duì)象 … 這里人這個(gè)對(duì)象,由鞋子、包包、衣服、 褲子、手鏈等對(duì)象組成。 3.每個(gè)對(duì)象都有: a)數(shù)據(jù)(描述對(duì)象的屬性) b)函數(shù)(行為操作代碼

    2023年04月12日
    瀏覽(29)
  • C++ ------類和對(duì)象詳解六大默認(rèn)成員函數(shù)

    C++ ------類和對(duì)象詳解六大默認(rèn)成員函數(shù)

    如果我們定義一個(gè)類,然后這個(gè)類中什么也沒有。那么這里的類就什么也沒有嗎?其實(shí)不然,任何類在里面什么都不寫時(shí),編譯器都會(huì)生成6個(gè)默認(rèn)成員函數(shù)。 用戶沒有顯式實(shí)現(xiàn),編譯器會(huì)生成的成員函數(shù)稱為默認(rèn)成員函數(shù)。 六個(gè)默認(rèn)成員函數(shù) 我們來看一個(gè)Date類 觀察上述代

    2024年02月15日
    瀏覽(28)
  • 【030】C++類和對(duì)象之友元(friend)詳解

    【030】C++類和對(duì)象之友元(friend)詳解

    ?? 作者簡(jiǎn)介:專注于C/C++高性能程序設(shè)計(jì)和開發(fā),理論與代碼實(shí)踐結(jié)合,讓世界沒有難學(xué)的技術(shù)。包括C/C++、Linux、MySQL、Redis、TCP/IP、協(xié)程、網(wǎng)絡(luò)編程等。 ?? ??? CSDN實(shí)力新星,社區(qū)專家博主 ?? ?? 專欄介紹:從零到c++精通的學(xué)習(xí)之路。內(nèi)容包括C++基礎(chǔ)編程、中級(jí)編程、

    2024年02月09日
    瀏覽(22)
  • 【C++】類和對(duì)象詳解(類的使用,this指針)

    【C++】類和對(duì)象詳解(類的使用,this指針)

    提示:這里可以添加本文要記錄的大概內(nèi)容: 在計(jì)算機(jī)編程領(lǐng)域,程序設(shè)計(jì)的方法論不斷演化,從最初的面向過程到如今更為強(qiáng)大而靈活的面向?qū)ο?。本文將深入探討C++中關(guān)于類和對(duì)象的概念,為讀者提供對(duì)面向?qū)ο缶幊痰纳羁汤斫狻?提示:以下是本篇文章正文內(nèi)容,下面

    2024年02月02日
    瀏覽(21)
  • c、c++、java、python、js對(duì)比【面向?qū)ο?、過程;解釋、編譯語言;封裝、繼承、多態(tài)】

    c、c++、java、python、js對(duì)比【面向?qū)ο蟆⑦^程;解釋、編譯語言;封裝、繼承、多態(tài)】

    目錄 內(nèi)存管理、適用 區(qū)別 C 手動(dòng)內(nèi)存管理:C語言沒有內(nèi)置的安全檢查機(jī)制,容易出現(xiàn)內(nèi)存泄漏、緩沖區(qū)溢出等安全問題。 適用于系統(tǒng)級(jí)編程 C++ 手動(dòng)內(nèi)存管理:C++需要程序員手動(dòng)管理內(nèi)存,包括分配和釋放內(nèi)存,這可能導(dǎo)致內(nèi)存泄漏和指針錯(cuò)誤。 適用于游戲引擎和系統(tǒng)級(jí)編

    2024年02月08日
    瀏覽(51)
  • 一文帶你入門C++類和對(duì)象【十萬字詳解,一篇足夠了】

    一文帶你入門C++類和對(duì)象【十萬字詳解,一篇足夠了】

    本文字?jǐn)?shù)較多,建議電腦端訪問。不多廢話,正文開始 從本文開始,我們就要正式來學(xué)習(xí)C++中的類和對(duì)象了,本文我將帶你一步步 從C語言的結(jié)構(gòu)體 struct 到C++的類 class ,真正搞懂有關(guān)C++的 面向?qū)ο蟮娜筇卣髦?—— 封裝 作為讀者,可能你正在學(xué)習(xí)C語言,亦或者已經(jīng)開

    2024年02月05日
    瀏覽(27)
  • Python-面向?qū)ο螅好嫦驅(qū)ο?、成員方法 、類和對(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ù)的組織 在程序中簡(jiǎn)單使用變量來記錄學(xué)

    2024年02月14日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包