欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中的多態(tài)詳談

 更新時(shí)間:2021年05月12日 08:53:56   作者:LHlucky_2  
多態(tài)通俗來(lái)說(shuō)就是多種形態(tài),本文通過(guò)實(shí)例代碼給大家介紹C++中的多態(tài)定義及實(shí)現(xiàn),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

1. 多態(tài)概念

1.1 概念

  • 多態(tài)的概念:通俗來(lái)說(shuō),就是多種形態(tài),具體點(diǎn)就是去完成某個(gè)行為,當(dāng)不同的對(duì)象去完成時(shí)會(huì)產(chǎn)生出不同的狀態(tài)。
  • 舉個(gè)栗子:比如買(mǎi)票,當(dāng)普通人買(mǎi)票時(shí),是全價(jià)買(mǎi)票;學(xué)生買(mǎi)票時(shí),是半價(jià)買(mǎi)票;軍人買(mǎi)票時(shí)是優(yōu)先買(mǎi)票。同一個(gè)事情針對(duì)不同的人或情況有不同的結(jié)果或形態(tài)。

2. 多態(tài)的定義及實(shí)現(xiàn)

2.1 多態(tài)的構(gòu)成條件

多態(tài)是在不同繼承關(guān)系的類(lèi)對(duì)象,去調(diào)用同一函數(shù),產(chǎn)生了不同的行為。比如Student繼承了Person。
Person對(duì)象買(mǎi)票全價(jià),Student對(duì)象買(mǎi)票半價(jià)。

注意:那么在繼承中要構(gòu)成多態(tài)還有兩個(gè)條件:

  • 必須通過(guò)基類(lèi)的指針或者引用調(diào)用虛函數(shù)。
  • 被調(diào)用的函數(shù)必須是**虛函數(shù),且派生類(lèi)必須對(duì)基類(lèi)的虛函數(shù)進(jìn)行重寫(xiě)。

2.2 虛函數(shù)

虛函數(shù):即被virtual修飾的類(lèi)成員函數(shù)稱(chēng)為虛函數(shù)。

class Person {
public:
	virtual void BuyTicket() { cout << "買(mǎi)票-全價(jià)" << endl;}
};

2.3 虛函數(shù)的重寫(xiě)

  • 虛函數(shù)的重寫(xiě)(覆蓋):派生類(lèi)中有一個(gè)跟基類(lèi)完全相同的虛函數(shù)(即派生類(lèi)虛函數(shù)與基類(lèi)虛函數(shù)的返回值類(lèi)型、函數(shù)名字、參數(shù)列表完全相同),稱(chēng)子類(lèi)的虛函數(shù)重寫(xiě)了基類(lèi)的虛函數(shù)。

注意

  • 在重寫(xiě)基類(lèi)虛函數(shù)時(shí),派生類(lèi)的虛函數(shù)在不加virtual關(guān)鍵字時(shí),雖然也可以構(gòu)成重寫(xiě)(因?yàn)槔^
  • 承后基類(lèi)的虛函數(shù)被繼承下來(lái)了在派生類(lèi)依舊保持虛函數(shù)屬性),但是該種寫(xiě)法不是很規(guī)范,不建議這樣使用。
class Person {
public:
	virtual void BuyTicket() { cout << "買(mǎi)票-全價(jià)" << endl; }
};
class Student : public Person {
public:
	void BuyTicket() { cout << "買(mǎi)票-半價(jià)" << endl; }
};

2.4 代碼示例

2.4.1 沒(méi)構(gòu)成重寫(xiě)

在這里插入圖片描述

2.4.2 構(gòu)成重寫(xiě)

在這里插入圖片描述

2.5 虛函數(shù)重寫(xiě)的兩個(gè)例外

2.5.1 協(xié)變

派生類(lèi)重寫(xiě)基類(lèi)虛函數(shù)時(shí),與基類(lèi)虛函數(shù)返回值類(lèi)型不同。即基類(lèi)虛函數(shù)返回基類(lèi)對(duì)象的指針或者引用,派生類(lèi)虛函數(shù)返回派生類(lèi)對(duì)象的指針或者引用時(shí),稱(chēng)為協(xié)變。

在這里插入圖片描述

2.5.2 析構(gòu)函數(shù)的重寫(xiě)

如果基類(lèi)的析構(gòu)函數(shù)為虛函數(shù),此時(shí)派生類(lèi)析構(gòu)函數(shù)只要定義,無(wú)論是否加virtual關(guān)鍵字,都與基類(lèi)的析構(gòu)函數(shù)構(gòu)成重寫(xiě),即使基類(lèi)與派生類(lèi)析構(gòu)函數(shù)名字不同。雖然函數(shù)名不相同,看起來(lái)違背了重寫(xiě)的規(guī)則,其實(shí)不然,這里可以理解為編譯器對(duì)析構(gòu)函數(shù)的名稱(chēng)做了特殊處理,編譯后析構(gòu)函數(shù)的名稱(chēng)統(tǒng)一處理成destructor

在這里插入圖片描述

注意

析構(gòu)函數(shù)在編譯以后函數(shù)名會(huì)統(tǒng)一成destructor。如果不加virtual則會(huì)造成重定義(隱藏),如上圖代碼如果不構(gòu)成析構(gòu)函數(shù)的重寫(xiě),則在析構(gòu)p2時(shí)只會(huì)析構(gòu)Student,因?yàn)榇藭r(shí)成了重定義所以不會(huì)自動(dòng)調(diào)用Person里面的析構(gòu),造成資源泄漏。

2.6 C++11 override 和 final

  • C++對(duì)函數(shù)重寫(xiě)的要求比較嚴(yán)格,但是有些情況下由于疏忽,可能會(huì)導(dǎo)致函數(shù)名字母次序?qū)懛炊鵁o(wú)法構(gòu)成重載,而這種錯(cuò)誤在編譯期間是不會(huì)報(bào)出的,只有在程序運(yùn)行時(shí)沒(méi)有得到預(yù)期結(jié)果才來(lái)debug會(huì)得不償失。
  • 因此:C++11提供了override和final兩個(gè)關(guān)鍵字,可以幫助用戶(hù)檢測(cè)是否重寫(xiě)。

1. final:修飾虛函數(shù),表示該虛函數(shù)不能再被繼承

在這里插入圖片描述

2. override: 檢查派生類(lèi)虛函數(shù)是否重寫(xiě)了基類(lèi)某個(gè)虛函數(shù),如果沒(méi)有重寫(xiě)編譯報(bào)錯(cuò)。

在這里插入圖片描述

2.7 重載、覆蓋(重寫(xiě))、隱藏(重定義)的對(duì)比

在這里插入圖片描述

在這里插入圖片描述

3. 抽象類(lèi)

3.1 概念

在虛函數(shù)的后面寫(xiě)上 =0 ,則這個(gè)函數(shù)為純虛函數(shù)。包含純虛函數(shù)的類(lèi)叫做抽象類(lèi)(也叫接口類(lèi)),抽象類(lèi)不能實(shí)例化出對(duì)象。派生類(lèi)繼承后也不能實(shí)例化出對(duì)象,只有重寫(xiě)純虛函數(shù),派生類(lèi)才能實(shí)例化出對(duì)象。純虛函數(shù)規(guī)范了派生類(lèi)必須重寫(xiě),另外純虛函數(shù)更體現(xiàn)出了接口繼承。

在這里插入圖片描述

3.2 接口繼承和實(shí)現(xiàn)繼承

  • 普通函數(shù)的繼承是一種實(shí)現(xiàn)繼承,派生類(lèi)繼承了基類(lèi)函數(shù),可以使用函數(shù),繼承的是函數(shù)的實(shí)現(xiàn)。
  • 虛函數(shù)的繼承是一種接口繼承,派生類(lèi)繼承的是基類(lèi)虛函數(shù)的接口,目的是為了重寫(xiě),達(dá)成多態(tài),繼承的是接口。所以如果不實(shí)現(xiàn)多態(tài),不要把函數(shù)定義成虛函數(shù)。

4.多態(tài)的原理

4.1虛函數(shù)表

在這里插入圖片描述

通過(guò)觀察測(cè)試我們發(fā)現(xiàn)b對(duì)象是8bytes,除了_b成員,還多一個(gè)__vfptr放在對(duì)象的前面(注意有些平臺(tái)可能會(huì)放到對(duì)象的最后面,這個(gè)跟平臺(tái)有關(guān)),對(duì)象中的這個(gè)指針我們叫做虛函數(shù)表指針(v代表virtual,f代表function)。一個(gè)含有虛函數(shù)的類(lèi)中都至少都有一個(gè)虛函數(shù)表指針,因?yàn)樘摵瘮?shù)的地址要被放到虛函數(shù)表中,虛函數(shù)表也簡(jiǎn)稱(chēng)虛表。

在這里插入圖片描述

虛函數(shù)表指針(簡(jiǎn)稱(chēng)虛表指針)

虛函數(shù)表本質(zhì)是一個(gè)指針數(shù)組(指針是一個(gè)虛函數(shù)指針),(虛基表->菱形繼->存的偏移量)。

在這里插入圖片描述

基類(lèi)和派生類(lèi)中的虛函數(shù)表。

在這里插入圖片描述

總結(jié):

  • 基類(lèi)b對(duì)象和派生類(lèi)d對(duì)象虛表是不一樣的,這里我們發(fā)現(xiàn)Func1完成了重寫(xiě),所以d的虛表中存的是重寫(xiě)的Derive::Func1,所以虛函數(shù)的重寫(xiě)也叫作覆蓋,覆蓋就是指虛表中虛函數(shù)的覆蓋。重寫(xiě)是語(yǔ)法的叫法,覆蓋是原理層的叫法。
  • 另外Func2繼承下來(lái)后是虛函數(shù),所以放進(jìn)了虛表,F(xiàn)unc3也繼承下來(lái)了,但是不是虛函數(shù),所以不會(huì)放進(jìn)虛表。
  • 虛函數(shù)表本質(zhì)是一個(gè)存虛函數(shù)指針的指針數(shù)組,這個(gè)數(shù)組最后面放了一個(gè)nullptr。
  • 派生類(lèi)的虛表生成:
  • a.先將基類(lèi)中的虛表內(nèi)容拷貝一份到派生類(lèi)虛表中
  • b.如果派生類(lèi)重寫(xiě)了基類(lèi)中某個(gè)虛函數(shù),用派生類(lèi)自己的虛函數(shù)覆蓋虛表中基類(lèi)的虛函數(shù)
  • c.派生類(lèi)自己新增加的虛函數(shù)按其在派生類(lèi)中的聲明次序增加到派生類(lèi)虛表的最后。
  • 虛函數(shù)存在哪的?虛表存在哪的?
  • 虛函數(shù)在代碼段,虛函數(shù)表也在代碼段。虛函數(shù)表中存放的是虛函數(shù)地址。對(duì)象里面是虛函數(shù)表的指針。

4.2多態(tài)的原理

在這里插入圖片描述

在這里插入圖片描述

總結(jié)

  1. 這樣就實(shí)現(xiàn)出了不同對(duì)象去完成同一行為時(shí),展現(xiàn)出不同的形態(tài)。
  2. 反過(guò)來(lái)思考我們要達(dá)到多態(tài),有兩個(gè)條件,一個(gè)是虛函數(shù)覆蓋,一個(gè)是對(duì)象的指針或引用調(diào)用虛函數(shù)?
  3. 虛函數(shù)覆蓋是為了構(gòu)成多態(tài)時(shí)不同的對(duì)象通過(guò)調(diào)用對(duì)應(yīng)類(lèi)中的虛函數(shù)表時(shí)通過(guò)虛函數(shù)的地址去找到對(duì)應(yīng)的虛函數(shù)。而指針或者引用是因?yàn)樵谡覍?duì)應(yīng)的虛函數(shù)時(shí)是在虛函數(shù)表中通過(guò)地址查找的。
  4. 通過(guò)匯編代碼分析,看出滿足多態(tài)以后的函數(shù)調(diào)用,不是在編譯時(shí)確定的,是運(yùn)行起來(lái)以后到對(duì)象中去找的。不滿足多態(tài)的函數(shù)調(diào)用時(shí)編譯時(shí)確認(rèn)好的。即不滿足多態(tài)的函數(shù)地址編譯時(shí)已經(jīng)確定,而構(gòu)成多態(tài)的虛函數(shù)在運(yùn)行時(shí)會(huì)通過(guò)地址去call。

4.3 動(dòng)態(tài)綁定與靜態(tài)綁定

  • 靜態(tài)綁定又稱(chēng)為前期綁定(早綁定),在程序編譯期間確定了程序的行為,也稱(chēng)為靜態(tài)多態(tài),比如:函數(shù)重載。
  • 動(dòng)態(tài)綁定又稱(chēng)后期綁定(晚綁定),是在程序運(yùn)行期間,根據(jù)具體拿到的類(lèi)型確定程序的具體行為,調(diào)用具體的函數(shù),也稱(chēng)為動(dòng)態(tài)多態(tài)。

5.單繼承和多繼承關(guān)系的虛函數(shù)表

5.1 單繼承中的虛函數(shù)表

在這里插入圖片描述

通過(guò)代碼打印出虛表中的函數(shù):

#include<iostream>
using namespace std;

class Base {
public:
	virtual void func1() { cout << "Base::func1" << endl; }
	virtual void func2() { cout << "Base::func2" << endl; }
private:
	int a;
};
class Derive :public Base {
public:
	virtual void func1() { cout << "Derive::func1" << endl; }
	virtual void func3() { cout << "Derive::func3" << endl; }
	virtual void func4() { cout << "Derive::func4" << endl; }
private:
	int b;
};
typedef void(*VFPTR) ();
void PrintVTable(VFPTR vTable[])
{
	// 依次取虛表中的虛函數(shù)指針打印并調(diào)用。調(diào)用就可以看出存的是哪個(gè)函數(shù)
	cout << " 虛表地址>" << vTable << endl;
	for (int i = 0; vTable[i] != nullptr; ++i)
	{
		printf(" 第%d個(gè)虛函數(shù)地址 :0X%x,->", i, vTable[i]);
		VFPTR f = vTable[i];
		f();
	}
	cout << endl;
}

int main()
{
	Base b;
	Derive d;
	// 思路:取出b、d對(duì)象的頭4bytes,就是虛表的指針,前面我們說(shuō)了虛函數(shù)表本質(zhì)是一個(gè)存虛函數(shù)指針的指針數(shù)組,這個(gè)數(shù)組最后面放了一個(gè)nullptr
	// 1.先取b的地址,強(qiáng)轉(zhuǎn)成一個(gè)int*的指針
	// 2.再解引用取值,就取到了b對(duì)象頭4bytes的值,這個(gè)值就是指向虛表的指針
	// 3.再?gòu)?qiáng)轉(zhuǎn)成VFPTR*,因?yàn)樘摫砭褪且粋€(gè)存VFPTR類(lèi)型(虛函數(shù)指針類(lèi)型)的數(shù)組。
	// 4.虛表指針傳遞給PrintVTable進(jìn)行打印虛表
	// 5.需要說(shuō)明的是這個(gè)打印虛表的代碼經(jīng)常會(huì)崩潰,因?yàn)榫幾g器有時(shí)對(duì)虛表的處理不干凈,虛表最后面沒(méi)有放nullptr,導(dǎo)致越界,這是編譯器的問(wèn)題。我們只需要點(diǎn)目錄欄的 - 生成 - 清理解決方案,再編譯就好了。
	VFPTR * vTableb = (VFPTR*)(*(int*)&b);
	PrintVTable(vTableb);
	VFPTR* vTabled = (VFPTR*)(*(int*)&d);
	PrintVTable(vTabled);
	return 0;
}

在這里插入圖片描述

5.2 多繼承中的虛函數(shù)表

#include<iostream>
using namespace std;

class Base1 {
public:
	virtual void func1() { cout << "Base1::func1" << endl; }
	virtual void func2() { cout << "Base1::func2" << endl; }
private:
	int b1;
};
class Base2 {
public:
	virtual void func1() { cout << "Base2::func1" << endl; }
	virtual void func2() { cout << "Base2::func2" << endl; }
private:
	int b2;
};
class Derive : public Base1, public Base2 {
public:
	virtual void func1() { cout << "Derive::func1" << endl; }
	virtual void func3() { cout << "Derive::func3" << endl; }
private:
	int d1;
};
typedef void(*VFPTR) ();
void PrintVTable(VFPTR vTable[])
{
	cout << " 虛表地址>" << vTable << endl;
	for (int i = 0; vTable[i] != nullptr; ++i)
	{
		printf(" 第%d個(gè)虛函數(shù)地址 :0X%x,->", i, vTable[i]);
		VFPTR f = vTable[i];
		f();
	}
	cout << endl;
}
int main()
{
	Derive d;
	VFPTR* vTableb1 = (VFPTR*)(*(int*)&d);
	PrintVTable(vTableb1);
	VFPTR* vTableb2 = (VFPTR*)(*(int*)((char*)&d + sizeof(Base1)));
	PrintVTable(vTableb2);
	return 0;
}

在這里插入圖片描述

6. 相關(guān)題目

1. inline函數(shù)可以是虛函數(shù)嗎?

答:能,virtual函數(shù)可以寫(xiě)成inline函數(shù),不會(huì)造成語(yǔ)法錯(cuò)誤。虛函數(shù)是在運(yùn)行的時(shí)候才決定調(diào)用基類(lèi)或者子類(lèi)的對(duì)應(yīng)函數(shù),inline函數(shù)是在編譯期間來(lái)決定展開(kāi)與否。虛函數(shù)是在運(yùn)行的時(shí)候才決定調(diào)用基類(lèi)或者子類(lèi)的對(duì)應(yīng)函數(shù),inline函數(shù)是在編譯期間來(lái)決定展開(kāi)與否。虛函數(shù)是在運(yùn)行的時(shí)候才決定調(diào)用基類(lèi)或者子類(lèi)的對(duì)應(yīng)函數(shù),inline函數(shù)是在編譯期間來(lái)決定展開(kāi)與否。

2. 靜態(tài)成員可以是虛函數(shù)嗎?

答:不能,因?yàn)殪o態(tài)成員函數(shù)沒(méi)有this指針,使用類(lèi)型::成員函數(shù)的調(diào)用方式無(wú)法訪問(wèn)虛函數(shù)表,所以靜態(tài)成員函數(shù)無(wú)法放進(jìn)虛函數(shù)表。

3. 構(gòu)造函數(shù)可以是虛函數(shù)嗎?

答:不能,因?yàn)閷?duì)象中的虛函數(shù)表指針是在構(gòu)造函數(shù)初始化列表階段才初始化的。

4. 析構(gòu)函數(shù)可以是虛函數(shù)嗎?什么場(chǎng)景下析構(gòu)函數(shù)是虛函數(shù)?

答:可以,并且最好把基類(lèi)的析構(gòu)函數(shù)定義成虛函數(shù)。

5. 對(duì)象訪問(wèn)普通函數(shù)快還是虛函數(shù)更快?

答:首先如果是普通對(duì)象,是一樣快的。如果是指針對(duì)象或者是引用對(duì)象,則調(diào)用的普通函數(shù)快,因?yàn)闃?gòu)成多態(tài),運(yùn)行時(shí)調(diào)用虛函數(shù)需要到虛函數(shù)表中去查找。

6. 虛函數(shù)表是在什么階段生成的,存在哪的?

答:虛函數(shù)表是在編譯階段就生成的,一般情況下存在代碼段(常量區(qū))的。

到此這篇關(guān)于C++多態(tài)詳談的文章就介紹到這了,更多相關(guān)C++多態(tài)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++智能指針shared_ptr

    C++智能指針shared_ptr

    這篇文章主要介紹了C++智能指針shared_ptr,C++11中包括shared_ptr在內(nèi)的多種指針,都是模板類(lèi)型,意味著使用者可以指定想要操作的類(lèi)型下文從shared_ptr創(chuàng)建方式展開(kāi)全文,介紹詳細(xì)具有一的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • C++讀取配置文件的示例代碼

    C++讀取配置文件的示例代碼

    這篇文章主要介紹了C++讀取配置文件的示例代碼,幫助大家更好的理解和學(xué)習(xí)C++開(kāi)發(fā),感興趣的朋友可以了解下
    2020-08-08
  • c++ 編程 幾個(gè)有用的宏詳解

    c++ 編程 幾個(gè)有用的宏詳解

    下面小編就為大家?guī)?lái)一篇c++ 編程 幾個(gè)有用的宏詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • 關(guān)于C++運(yùn)算符重載的一些困惑詳解

    關(guān)于C++運(yùn)算符重載的一些困惑詳解

    這篇文章主要給大家介紹了關(guān)于C++運(yùn)算符重載的一些困惑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C中qsort快速排序使用實(shí)例

    C中qsort快速排序使用實(shí)例

    在學(xué)習(xí)C++ STL的sort函數(shù),發(fā)現(xiàn)C中也存在一個(gè)qsort快速排序,要好好學(xué)習(xí)下C的庫(kù)函數(shù)啊
    2014-01-01
  • 在C++17中實(shí)現(xiàn)無(wú)鎖數(shù)據(jù)結(jié)構(gòu)的方法詳解

    在C++17中實(shí)現(xiàn)無(wú)鎖數(shù)據(jù)結(jié)構(gòu)的方法詳解

    在探索?C++17?中的無(wú)鎖數(shù)據(jù)結(jié)構(gòu)之前,我們首先需要理解無(wú)鎖編程的基本概念及其在現(xiàn)代軟件開(kāi)發(fā)中的重要性,在這個(gè)章節(jié)中,我們將深入探討無(wú)鎖編程的概念,以及它如何滿足人類(lèi)對(duì)于更高效、更可靠軟件的本能需求,文中通過(guò)代碼示例介紹的非常詳細(xì),感興趣的朋友可以參考下
    2023-12-12
  • C++無(wú)法打開(kāi)源文件bits/stdc++.h的問(wèn)題

    C++無(wú)法打開(kāi)源文件bits/stdc++.h的問(wèn)題

    這篇文章主要介紹了C++無(wú)法打開(kāi)源文件bits/stdc++.h的問(wèn)題以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 使用?Visual?Studio?2022?開(kāi)發(fā)?Linux?C++?應(yīng)用程序的過(guò)程詳解

    使用?Visual?Studio?2022?開(kāi)發(fā)?Linux?C++?應(yīng)用程序的過(guò)程詳解

    Visual?Studio?2022?引入了用于?Linux?C++?開(kāi)發(fā)的本機(jī)?WSL2?工具集,可以構(gòu)建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開(kāi)發(fā)?Linux?C++?應(yīng)用程序,需要的朋友可以參考下
    2021-11-11
  • C語(yǔ)言示例代碼講解棧與隊(duì)列

    C語(yǔ)言示例代碼講解棧與隊(duì)列

    棧和隊(duì)列,嚴(yán)格意義上來(lái)說(shuō),也屬于線性表,因?yàn)樗鼈円捕加糜诖鎯?chǔ)邏輯關(guān)系為?"一對(duì)一"?的數(shù)據(jù),但由于它們比較特殊,本章講解分別用隊(duì)列實(shí)現(xiàn)棧與用棧實(shí)現(xiàn)隊(duì)列
    2022-05-05
  • C語(yǔ)言深入分析浮點(diǎn)型數(shù)據(jù)存儲(chǔ)

    C語(yǔ)言深入分析浮點(diǎn)型數(shù)據(jù)存儲(chǔ)

    使用編程語(yǔ)言進(jìn)行編程時(shí),需要用到各種變量來(lái)存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類(lèi)型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類(lèi)型,來(lái)分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-08-08

最新評(píng)論