亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++分析類的對(duì)象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員

 更新時(shí)間:2022年05月27日 09:39:18   作者:對(duì)象new不出來(lái)  
終于到了對(duì)象的初始化和清理的最后階段了,在這里分享一個(gè)cpp里有多個(gè)類時(shí),一個(gè)類的對(duì)象作為另一個(gè)類成員的時(shí)候構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用的時(shí)機(jī)。還有一個(gè)靜態(tài)成員也是經(jīng)??嫉降狞c(diǎn),在這篇博客將會(huì)詳解其概念并舉出案例鞏固,讓我們開始

類對(duì)象作為成員

C++類中的成員可以是另一個(gè)類的對(duì)象,我們稱該成員為 對(duì)象成員

例如:

class Phone {}
class Person
{
    Phone p;
}

tips:當(dāng)類中成員是其他類對(duì)象時(shí),我們稱該成員為 對(duì)象成員

Person類中有對(duì)象p作為成員,Phone為對(duì)象成員,那么當(dāng)創(chuàng)建Person對(duì)象時(shí),Phone與Person的構(gòu)造和析構(gòu)的順序是誰(shuí)先誰(shuí)后?

那讓我們?cè)趦蓚€(gè)類中加上一些輸出語(yǔ)句做提示就好了,可以清晰的看到構(gòu)造和析構(gòu)的順序。

示例:

#include<iostream>
using namespace std;
//類對(duì)象作為類成員
class Phone
{
public:
	Phone(string P_name)
	{
		p_name = P_name;
        cout<<"Phone類有參構(gòu)造"<<endl;
	}
    ~Phone()
	{
		cout << "Phone析構(gòu)" << endl;
	}
	string p_name;
};
class Person
{
public:
	Person(string m_Name,string p_Name):m_name(m_Name),m_PName(p_Name) {
        cout << "Person構(gòu)造" << endl;}//初始化列表
    ~Person()
	{
		cout << "Person析構(gòu)" << endl;
	}
	string m_name;
	Phone m_PName;
};
void test01()
{
	Person p1("張三", "華為nova7");
	Person p3(p1);//調(diào)用默認(rèn)拷貝構(gòu)造函數(shù)
	p3.m_name = "李白"; p3.m_PName.p_name = "iphone MAX";
	cout << p1.m_name << "拿著" << p1.m_PName.p_name << endl;
	cout << p3.m_name << "拿著" << p3.m_PName.p_name << endl;
}
int main()
{
	test01();
}

從結(jié)果圖中看出同時(shí)調(diào)用有參構(gòu)造的時(shí)候,先調(diào)用對(duì)象成員的構(gòu)造,再調(diào)用本類構(gòu)造

析構(gòu)的順序相反

靜態(tài)成員

定義和分類

靜態(tài)成員就是在成員變量和成員函數(shù)前加上關(guān)鍵字static,稱為靜態(tài)成員

靜態(tài)成員分為:

靜態(tài)成員變量

  • 所有對(duì)象共享同一份數(shù)據(jù)
  • 在編譯階段分配內(nèi)存
  • 類內(nèi)聲明,類外初始化

靜態(tài)成員函數(shù)

  • 所有對(duì)象共享同一個(gè)函數(shù)
  • 靜態(tài)成員函數(shù)只能訪問(wèn)靜態(tài)成員變量

靜態(tài)成員變量

class Person
{
public:
	static int m_A; 
private:
	static int m_B; 
};
int Person::m_A = 10;
int Person::m_B = 10;
void test01()
{
	//靜態(tài)成員變量?jī)煞N訪問(wèn)方式
	//1、通過(guò)對(duì)象
	Person p1;
	p1.m_A = 100;
	cout << "p1.m_A = " << p1.m_A << endl;
	Person p2;
	p2.m_A = 200;
	cout << "p1.m_A = " << p1.m_A << endl; //共享同一份數(shù)據(jù)
	cout << "p2.m_A = " << p2.m_A << endl;
	//2、通過(guò)類名
	cout << "m_A = " << Person::m_A << endl;
	//cout << "m_B = " << Person::m_B << endl; //私有權(quán)限訪問(wèn)不到
}
int main() {
	test01();
	system("pause");
	return 0;
}

靜態(tài)成員變量也是有訪問(wèn)權(quán)限的,無(wú)論是public或者是private在類內(nèi)都可以被訪問(wèn),m_A和m_B在類內(nèi)定義在類外初始化,還記得類外初始化嗎,就是變量類型加類名加::變量名=值;同時(shí)可以通過(guò)對(duì)象和類名兩種方式訪問(wèn)靜態(tài)成員變量。

靜態(tài)成員函數(shù)

class Person
{
public:
	int getB()
	{
		return m_B;
	}
	static int m_A;
	int m_C;//非靜態(tài)成員變量
	//靜態(tài)成員函數(shù)
	static void func()
	{
		m_A = 100;
		//m_C = 20;
		cout << "static void func 的調(diào)用" << endl;
	}
private:
	static int m_B;
	static void func2()
	{
		cout << "static void func 的調(diào)用" << endl;
	}
};
int Person::m_A = 100;//類外外面初始化
int Person::m_B = 200;
void test03()
{
	//調(diào)用方式有兩種
	//1、通過(guò)對(duì)象調(diào)用
	Person p;
	p.func();
	//通過(guò)類名調(diào)用
	Person::func();
	//類外訪問(wèn)不到靜態(tài)成員函數(shù),靜態(tài)成員函數(shù)也有訪問(wèn)權(quán)限
}

靜態(tài)成員函數(shù)也有權(quán)限的控制,代碼里寫了func是公共權(quán)限,func2是私有權(quán)限;靜態(tài)成員函數(shù)也有對(duì)象調(diào)用和類名調(diào)用兩種方式,但是都無(wú)法調(diào)用私有權(quán)限的靜態(tài)成員函數(shù)。

注意事項(xiàng):靜態(tài)成員函數(shù)不可以訪問(wèn)非靜態(tài)成員變量,無(wú)法區(qū)分到底是哪個(gè)對(duì)象的屬性,只有公用的靜態(tài)成員變量才可以被訪問(wèn)。

總結(jié)

熱烈慶祝對(duì)象的初始化和清理完工,作為C++核心編程比較重要的一部分,我也是認(rèn)真的總結(jié)了一遍,感覺(jué)很充實(shí),下篇博客直指this指針和成員變量以及成員函數(shù)的存儲(chǔ)問(wèn)題,期待你的鼓勵(lì),下篇再見(jiàn)!

到此這篇關(guān)于C++分析類的對(duì)象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員的文章就介紹到這了,更多相關(guān)C++類的對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論