成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++類(lèi)與對(duì)象(一)-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)從2013年開(kāi)始,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元貴州做網(wǎng)站,已為上家服務(wù),為貴州各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18980820575

一、面向過(guò)程和面向?qū)ο笳J(rèn)識(shí)

二、類(lèi)的引入

三、類(lèi)的定義

類(lèi)的兩種定義方式:

四、類(lèi)的訪問(wèn)限定符及封裝

4.1 訪問(wèn)限定符

4.2 封裝

五、類(lèi)的作用域

六、類(lèi)的實(shí)例化

七、類(lèi)對(duì)象模型

7.1 如何計(jì)算類(lèi)對(duì)象的大小?????

7.2 類(lèi)對(duì)象的存儲(chǔ)方式

7.3 結(jié)構(gòu)體內(nèi)存對(duì)齊規(guī)則

八、this指針

8.1 this指針的引出

8.2 this指針的特性

this指針可以為空嗎?


一、面向過(guò)程和面向?qū)ο笳J(rèn)識(shí)

C語(yǔ)言: 面向過(guò)程,C語(yǔ)言是面向過(guò)程的,關(guān)注的是過(guò)程,分析出求解問(wèn)題的步驟,通過(guò)函數(shù)調(diào)用逐步解決問(wèn)題,比如干一件事情,第一步第二步,,,,

舉個(gè)例子:洗衣服

C++:? 基于面向?qū)ο螅ㄗ⒁猓翰皇羌兠嫦驅(qū)ο蟮恼Z(yǔ)言,java是純面向?qū)ο蟮恼Z(yǔ)言)原因:C++在C語(yǔ)言基礎(chǔ)上發(fā)展,要兼容C語(yǔ)言,C++是基于面向?qū)ο蟮?,關(guān)注的是對(duì)象,將一件事情拆分成不同的對(duì)象,靠對(duì)象之間的交互完成

面向?qū)ο蟪绦蛟O(shè)計(jì)有四大特征:抽象? 封裝? ? 繼承? ?多態(tài)

抽象:對(duì)一個(gè)復(fù)雜事務(wù)的認(rèn)識(shí)過(guò)程

二、類(lèi)的引入 C 語(yǔ)言結(jié)構(gòu)體中只能定義變量,在 C++ 中,結(jié)構(gòu)體內(nèi)不僅可以定義變量,也可以定義函數(shù)。 比如:之前在數(shù)據(jù)結(jié)構(gòu)初階中,用C 語(yǔ)言方式實(shí)現(xiàn)的棧,結(jié)構(gòu)體中只能定義變量 ;現(xiàn)在以 C++ 方式實(shí)現(xiàn),會(huì)發(fā)現(xiàn) struct 中也可以 定義函數(shù) 下面就是一個(gè)簡(jiǎn)單的棧的結(jié)構(gòu)體
#includeusing namespace std;

typedef int DataType;
struct Stack
{
	void Init(size_t capacity)
	{
		_array = (DataType*)malloc(sizeof(DataType) * capacity);
		if (nullptr == _array)
		{
			perror("malloc申請(qǐng)空間失敗");
			return;
		}
		_capacity = capacity;
		_size = 0;
	}
	void Push(const DataType& data)
	{
		// 擴(kuò)容
		_array[_size] = data;
		++_size;
	}
	DataType Top()
	{
		return _array[_size - 1];
	}
	void Destroy()
	{
		if (_array)
		{
			free(_array);
			_array = nullptr;
			_capacity = 0;
			_size = 0;
		}
	}
	DataType* _array;
	size_t _capacity;
	size_t _size;
};
int main()
{
	Stack s;
	s.Init(10);
	s.Push(1);
	s.Push(2);
	s.Push(3);
	cout<< s.Top()<< endl;
	s.Destroy();
	return 0;
}
三、類(lèi)的定義 class 為 定義類(lèi)的 關(guān)鍵字, ClassName 為類(lèi)的名字, {} 中為類(lèi)的主體,注意 類(lèi)定義結(jié)束時(shí)后面 分號(hào)不能省 略 。
class className
{
 // 類(lèi)體:由成員函數(shù)和成員變量組成
 
}; // 一定要注意后面的分號(hào)

類(lèi)體中內(nèi)容稱(chēng)為類(lèi)的成員:類(lèi)中的變量稱(chēng)為類(lèi)的屬性或成員變量; 類(lèi)中的函數(shù)稱(chēng)為類(lèi)的方法或者成員函數(shù)。

類(lèi)的兩種定義方式: 1. 聲明和定義全部放在類(lèi)體中,需注意:成員函數(shù)如果 在類(lèi)中定義 ,編譯器可能會(huì)將其當(dāng)成 內(nèi)聯(lián)函數(shù) 處理

例子就上上面棧那個(gè)代碼

2. 類(lèi)聲明放在.h文件中,成員函數(shù)定義放在.cpp文件中,注意:成員函數(shù)名前需要加類(lèi)名::

絕大部分情況下使用這種方法定義

四、類(lèi)的訪問(wèn)限定符及封裝 4.1 訪問(wèn)限定符 C++ 實(shí)現(xiàn)封裝的方式: 用類(lèi)將對(duì)象的屬性與方法結(jié)合在一塊,讓對(duì)象更加完善,通過(guò)訪問(wèn)權(quán)限選擇性的將其 接口提供給外部的用戶(hù)使用

【訪問(wèn)限定符說(shuō)明】

1. public 修飾的成員在 類(lèi)外可以直接被訪問(wèn) 2. protected 和 private 修飾的成員在 類(lèi)外不能直接被訪問(wèn) ( 此處 protected 和 private 是類(lèi)似的 ) 3. 訪問(wèn)權(quán)限 作用域從該訪問(wèn)限定符出現(xiàn)的位置開(kāi)始直到下一個(gè)訪問(wèn)限定符出現(xiàn)時(shí)為止 4. 如果后面沒(méi)有訪問(wèn)限定符,作用域就到 } 即類(lèi)結(jié)束。 5. class的默認(rèn)訪問(wèn)權(quán)限為private,struct為public(因?yàn)閟truct要兼容C) 注意: 訪問(wèn)限定符只在編譯時(shí)有用 ,當(dāng)數(shù)據(jù)映射到內(nèi)存后,沒(méi)有任何訪問(wèn)限定符上的區(qū)別

類(lèi)內(nèi):就是class定位的整個(gè)括號(hào)內(nèi)部,但是有的函數(shù)位置雖然沒(méi)在括號(hào)內(nèi)部,但是它前面加了類(lèi)名和作用限定符

類(lèi)外:就是main函數(shù),即不屬于class內(nèi)的函數(shù)

class student
{
	//類(lèi)內(nèi)
};

//類(lèi)外
int mian{

}

student::------; //類(lèi)內(nèi)
問(wèn)題:C++中struct和class的區(qū)別是什么? 解答:C++需要兼容C語(yǔ)言,所以C++中struct可以當(dāng)成結(jié)構(gòu)體使用。另外C++中struct還可以用來(lái)定義類(lèi)。和class定義類(lèi)是一樣的,區(qū)別是struct定義的類(lèi)默認(rèn)訪問(wèn)權(quán)限是public,class定義的類(lèi)默認(rèn)訪問(wèn)權(quán)限是private 4.2 封裝

面向?qū)ο蟪绦蛟O(shè)計(jì)有四大特征:抽象? 封裝? ? 繼承? ?多態(tài)

封裝:將數(shù)據(jù)和操作數(shù)據(jù)的方法進(jìn)行有機(jī)結(jié)合,隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開(kāi)接口來(lái)和對(duì)象進(jìn)行交互。

封裝本質(zhì)上是一種管理,讓用戶(hù)更方便使用類(lèi) 。比如:對(duì)于電腦這樣一個(gè)復(fù)雜的設(shè)備,提供給用戶(hù)的就只有開(kāi)關(guān)機(jī)鍵、通過(guò)鍵盤(pán)輸入,顯示器,USB 插孔等,讓用戶(hù)和計(jì)算機(jī)進(jìn)行交互,完成日常事務(wù)。但實(shí)際上電腦真正工作的卻是CPU 、顯卡、內(nèi)存等一些硬件元件

? ? ? ?在 C++ 語(yǔ)言中實(shí)現(xiàn)封裝,可以 通過(guò)類(lèi)將數(shù)據(jù)以及操作數(shù)據(jù)的方法進(jìn)行有機(jī)結(jié)合,通過(guò)訪問(wèn)權(quán)限來(lái)隱藏對(duì)象內(nèi) 部實(shí)現(xiàn)細(xì)節(jié),控制哪些方法可以在類(lèi)外部直接被使用

五、類(lèi)的作用域 類(lèi)定義了一個(gè)新的作用域 ,類(lèi)的所有成員都在類(lèi)的作用域中 。 在類(lèi)體外定義成員時(shí),需要 使用 :: 作用域操作符指明成員屬于哪個(gè)類(lèi)域

類(lèi)內(nèi):就是class定位的整個(gè)括號(hào)內(nèi)部,但是有的函數(shù)位置雖然沒(méi)在括號(hào)內(nèi)部,但是它前面加了類(lèi)名和作用限定符

類(lèi)外:就是main函數(shù),即不屬于class內(nèi)的函數(shù)

class Person
{
public:   //公開(kāi)的,都可以在類(lèi)外被訪問(wèn)
 void PrintPersonInfo();

private:  //不能直接在類(lèi)外被訪問(wèn)了
 char _name[20];
 char _gender[3];
 int _age;
};

// 這里需要指定PrintPersonInfo是屬于Person這個(gè)類(lèi)域
void Person::PrintPersonInfo()
{
 cout<< _name<< " "<< _gender<< " "<< _age<< endl;
}

六、類(lèi)的實(shí)例化 用類(lèi)類(lèi)型創(chuàng)建對(duì)象的過(guò)程,稱(chēng)為類(lèi)的實(shí)例化 1. 類(lèi)是對(duì)對(duì)象進(jìn)行描述的 ,是一個(gè) 模型 一樣的東西,限定了類(lèi)有哪些成員, 定義出一個(gè)類(lèi)并沒(méi)有分配實(shí)際的內(nèi)存空間來(lái)存儲(chǔ)它 ;比如:入學(xué)時(shí)填寫(xiě)的學(xué)生信息表,表格就可以看成是一個(gè)類(lèi),來(lái)描述具體學(xué)生信息。 2. 一個(gè)類(lèi)可以實(shí)例化出多個(gè)對(duì)象, 實(shí)例化出的對(duì)象占用實(shí)際的物理空間,存儲(chǔ)類(lèi)成員變量, 對(duì)象是類(lèi)的具體體現(xiàn) 3. 做個(gè)比方。 類(lèi)實(shí)例化出對(duì)象就像現(xiàn)實(shí)中使用建筑設(shè)計(jì)圖建造出房子,類(lèi)就像是設(shè)計(jì)圖 ,只設(shè)計(jì)出需要什么東西,但是并沒(méi)有實(shí)體的建筑存在,同樣類(lèi)也只是一個(gè)設(shè)計(jì),實(shí)例化出的對(duì)象才能實(shí)際存儲(chǔ)數(shù)據(jù),占用物理空間

七、類(lèi)對(duì)象模型

對(duì)象模型:對(duì)象在內(nèi)存中的布局形式--》簡(jiǎn)單來(lái)說(shuō):對(duì)象中包含了什么

7.1 如何計(jì)算類(lèi)對(duì)象的大小?????

學(xué)習(xí)以下代碼

class Date
{
	//一般情況下,成員方法的權(quán)限是公有的,成員變量的權(quán)限是私有的
	//到底怎么設(shè)置,需要根據(jù)應(yīng)用場(chǎng)景來(lái)
public:
	void InitDate(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	void PrintDate()
	{
		cout<< _year<< "/"<< _month<< "/"<< _day<< endl;
	}
	
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d;
	Date dd;
	d.InitDate(2022, 11, 20);
	d.PrintDate();

	dd.InitDate(2022, 11, 21);
	dd.PrintDate();

	cout<< sizeof(Date)<< endl;
	cout<< sizeof(d)<< endl;
	return 0;
}

運(yùn)行結(jié)果顯示,最終只包含了成員變量,計(jì)算類(lèi)大小的時(shí)候?qū)嶋H和計(jì)算結(jié)構(gòu)體大小的方式一模一樣。

7.2 類(lèi)對(duì)象的存儲(chǔ)方式
// 類(lèi)中既有成員變量,又有成員函數(shù)
class A1 {
public:
 void f1(){}
private:
 int _a;
};
// 類(lèi)中僅有成員函數(shù)
class A2 {
public:
 void f2() {}
};
// 類(lèi)中什么都沒(méi)有---空類(lèi)
class A3
{};
sizeof(A1) : __4__ __ sizeof(A2) : __1__ __ sizeof(A3) : __1__ __

結(jié)論:一個(gè)類(lèi)的大小,實(shí)際就是該類(lèi)中”成員變量”之和,當(dāng)然要注意內(nèi)存對(duì)齊 注意空類(lèi)的大小,空類(lèi)比較特殊,編譯器給了空類(lèi)一個(gè)字節(jié)來(lái)唯一標(biāo)識(shí)這個(gè)類(lèi)的對(duì)象

7.3 結(jié)構(gòu)體內(nèi)存對(duì)齊規(guī)則 1. 第一個(gè)成員在與結(jié)構(gòu)體偏移量為 0 的地址處。 2. 其他成員變量要對(duì)齊到某個(gè)數(shù)字(對(duì)齊數(shù))的整數(shù)倍的地址處。 注意:對(duì)齊數(shù) = 編譯器默認(rèn)的一個(gè)對(duì)齊數(shù) 與 該成員大小的較小值。 VS 中默認(rèn)的對(duì)齊數(shù)為 8 3. 結(jié)構(gòu)體總大小為:大對(duì)齊數(shù)(所有變量類(lèi)型大者與默認(rèn)對(duì)齊參數(shù)取最?。┑恼麛?shù)倍。 4. 如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對(duì)齊到自己的大對(duì)齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有大對(duì)齊數(shù)(含嵌套結(jié)構(gòu)體的對(duì)齊數(shù))的整數(shù)倍。

八、this指針 8.1 this指針的引出
class Date
{ 
public:
 void Init(int year, int month, int day)
 {
 _year = year;
 _month = month;
 _day = day;
 }
 void Print()
 {
 cout<<_year<< "-"<<_month<< "-"<< _day<
Date 類(lèi)中有 Init 與 Print 兩個(gè)成員函數(shù),函數(shù)體中沒(méi)有關(guān)于不同對(duì)象的區(qū)分,那當(dāng) d1 調(diào)用 Init 函數(shù)時(shí),該函數(shù)是如何知道應(yīng)該設(shè)置d1 對(duì)象,而不是設(shè)置 d2 對(duì)象呢? C++ 中通過(guò)引入 this 指針解決該問(wèn)題 即: C++ 編譯器給每個(gè) “ 非靜態(tài)的成員函數(shù) “ 增加了一個(gè)隱藏的指針參 數(shù),讓該指針指向當(dāng)前對(duì)象 ( 函數(shù)運(yùn)行時(shí)調(diào)用該函數(shù)的對(duì)象 ) ,在函數(shù)體中所有 “ 成員變量 ” 的操作,都是通過(guò)該 指針去訪問(wèn)。只不過(guò)所有的操作對(duì)用戶(hù)是透明的,即用戶(hù)不需要來(lái)傳遞,編譯器自動(dòng)完成

8.2 this指針的特性 1. this 指針的類(lèi)型:類(lèi)型 * const , 即成員函數(shù)中,不能給this指針賦值 。 2. 只能在 “ 成員函數(shù) ” 的內(nèi)部使用 3. this 指針本質(zhì)上是 “ 成員函數(shù) ” 的形參 ,當(dāng)對(duì)象調(diào)用成員函數(shù)時(shí),將對(duì)象地址作為實(shí)參傳遞給 this 形參所以對(duì)象中不存儲(chǔ) this 指針 。 4. this 指針是 “ 成員函數(shù) ” 第一個(gè)隱含的指針形參,一般情況由編譯器通過(guò) ecx 寄存器自動(dòng)傳遞,不需要用 戶(hù)傳遞

this指針可以為空嗎?
class A
{
public:
 void Print()
 {
 cout<< "Print()"<< endl;
 }
private:
 int _a;
};
int main()
{
 A* p = nullptr;
 p->Print();
 return 0;
}
程序編譯運(yùn)行結(jié)果是? A 、編譯報(bào)錯(cuò) B 、運(yùn)行崩潰 C 、正常運(yùn)行

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁(yè)標(biāo)題:C++類(lèi)與對(duì)象(一)-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://jinyejixie.com/article24/hepce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、App設(shè)計(jì)定制網(wǎng)站、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

秀山| 舟山市| 孝义市| 吉木乃县| 滁州市| 江川县| 东乡| 富裕县| 进贤县| 林甸县| 青阳县| 巴彦淖尔市| 驻马店市| 进贤县| 通州区| 那曲县| 兰西县| 绥江县| 临西县| 罗田县| 三江| 石棉县| 林州市| 梓潼县| 怀柔区| 招远市| 三台县| 保山市| 绵阳市| 南部县| 长武县| 丰原市| 瑞安市| 仪征市| 抚顺市| 寻乌县| 洪泽县| 庐江县| 宁武县| 广灵县| 澳门|