日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

<C++>詳解類對象作為類成員時調用構造和析構的時機及靜態成員解釋

作者:對象new不出來 更新時間: 2022-05-25 編程語言

??僅有一次的人生當然要活的比誰都熾熱!

??前言

終于到了對象的初始化和清理的最后階段了,在這里分享一個cpp里有多個類時,一個類的對象作為另一個類成員的時候構造函數和析構函數調用的時機。還有一個靜態成員也是經常考到的點,在這篇博客將會詳解其概念并舉出案例鞏固,讓我們開始。


??目錄

類對象作為成員

靜態成員

定義和分類

靜態成員變量?

靜態成員函數

??總結


類對象作為成員

C++類中的成員可以是另一個類的對象,我們稱該成員為 對象成員

例如:

class Phone {}
class Person
{
    Phone p;
}

tips:當類中成員是其他類對象時,我們稱該成員為 對象成員

Person類中有對象p作為成員,Phone為對象成員,那么當創建Person對象時,Phone與Person的構造和析構的順序是誰先誰后?

那讓我們在兩個類中加上一些輸出語句做提示就好了,可以清晰的看到構造和析構的順序。

示例:

#include
using namespace std;
//類對象作為類成員
class Phone
{
public:
	Phone(string P_name)
	{
		p_name = P_name;
        cout<<"Phone類有參構造"<

從結果圖中看出同時調用有參構造的時候,先調用對象成員的構造,再調用本類構造

析構的順序相反

靜態成員

定義和分類

靜態成員就是在成員變量和成員函數前加上關鍵字static,稱為靜態成員

靜態成員分為:

  • 靜態成員變量
    • 所有對象共享同一份數據
    • 在編譯階段分配內存
    • 類內聲明,類外初始化
  • 靜態成員函數
    • 所有對象共享同一個函數
    • 靜態成員函數只能訪問靜態成員變量

靜態成員變量?

class Person
{
	
public:

	static int m_A; 

private:
	static int m_B; 
};
int Person::m_A = 10;
int Person::m_B = 10;

void test01()
{
	//靜態成員變量兩種訪問方式
	//1、通過對象
	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; //共享同一份數據
	cout << "p2.m_A = " << p2.m_A << endl;
	//2、通過類名
	cout << "m_A = " << Person::m_A << endl;
	//cout << "m_B = " << Person::m_B << endl; //私有權限訪問不到
}
int main() {
	test01();
	system("pause");
	return 0;
}

靜態成員變量也是有訪問權限的,無論是public或者是private在類內都可以被訪問,m_A和m_B在類內定義在類外初始化,還記得類外初始化嗎,就是變量類型加類名加::變量名=值;同時可以通過對象和類名兩種方式訪問靜態成員變量。

靜態成員函數

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

靜態成員函數也有權限的控制,代碼里寫了func是公共權限,func2是私有權限;靜態成員函數也有對象調用和類名調用兩種方式,但是都無法調用私有權限的靜態成員函數。

注意事項:靜態成員函數不可以訪問非靜態成員變量,無法區分到底是哪個對象的屬性,只有公用的靜態成員變量才可以被訪問。

??總結

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

原文鏈接:https://blog.csdn.net/m0_58618795/article/details/124935985