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

C++分析類的對象作類成員調用構造與析構函數及靜態(tài)成員

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

類對象作為成員

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

例如:

class Phone {}
class Person
{
    Phone p;
}

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

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

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

示例:

#include<iostream>
using namespace std;
//類對象作為類成員
class Phone
{
public:
	Phone(string P_name)
	{
		p_name = P_name;
        cout<<"Phone類有參構造"<<endl;
	}
    ~Phone()
	{
		cout << "Phone析構" << endl;
	}
	string p_name;
};
class Person
{
public:
	Person(string m_Name,string p_Name):m_name(m_Name),m_PName(p_Name) {
        cout << "Person構造" << endl;}//初始化列表
    ~Person()
	{
		cout << "Person析構" << endl;
	}
	string m_name;
	Phone m_PName;
};
void test01()
{
	Person p1("張三", "華為nova7");
	Person p3(p1);//調用默認拷貝構造函數
	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();
}

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

析構的順序相反

靜態(tài)成員

定義和分類

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

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

靜態(tài)成員變量

  • 所有對象共享同一份數據
  • 在編譯階段分配內存
  • 類內聲明,類外初始化

靜態(tài)成員函數

  • 所有對象共享同一個函數
  • 靜態(tài)成員函數只能訪問靜態(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)成員變量兩種訪問方式
	//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;
}

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

靜態(tài)成員函數

class Person
{
public:
	int getB()
	{
		return m_B;
	}
	static int m_A;
	int m_C;//非靜態(tài)成員變量
	//靜態(tài)成員函數
	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();
	//類外訪問不到靜態(tài)成員函數,靜態(tài)成員函數也有訪問權限
}

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

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

總結

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

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

相關文章

  • C++文件的數據寫入和文件的數據讀取的方法實現(xiàn)

    C++文件的數據寫入和文件的數據讀取的方法實現(xiàn)

    本文主要介紹了C++文件的數據寫入和文件的數據讀取的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • c語言函數棧幀的創(chuàng)建和銷毀過程詳解

    c語言函數棧幀的創(chuàng)建和銷毀過程詳解

    我們知道c語言中函數都是被調用的,main函數里面能調用其他函數,其實main函數也是被別的函數調用的,下面通過本文給大家分享c語言函數棧幀的創(chuàng)建和銷毀過程,一起看看吧
    2021-08-08
  • 詳細總結C++的排序算法

    詳細總結C++的排序算法

    趁空閑時間,小編決定把C++的排序算法分析并總結下,以便溫故知新。也方便需要的朋友可以參考學習。
    2016-07-07
  • 如何在Qt中實現(xiàn)關于Json?的操作

    如何在Qt中實現(xiàn)關于Json?的操作

    JSON是一種輕量級數據交換格式,常用于客戶端和服務端的數據交互,不依賴于編程語言,在很多編程語言中都可以使用JSON,這篇文章主要介紹了在Qt中實現(xiàn)關于Json的操作,需要的朋友可以參考下
    2023-08-08
  • C語言枚舉(enum)和聯(lián)合(union)實例分享

    C語言枚舉(enum)和聯(lián)合(union)實例分享

    在本篇文章里小編給大家整理了關于C語言枚舉(enum)和聯(lián)合(union)實例內容,需要的朋友們可以學習下。
    2020-03-03
  • C語言實現(xiàn)鏈棧的步驟

    C語言實現(xiàn)鏈棧的步驟

    鏈棧是棧的鏈式存儲結構,鏈??梢杂脝捂湵淼念^插法實現(xiàn),本文主要講述了如何用c語言去實現(xiàn)鏈棧,感興趣的朋友可以了解下
    2021-05-05
  • Qt5.9實現(xiàn)簡單的多線程實例(類QThread)

    Qt5.9實現(xiàn)簡單的多線程實例(類QThread)

    Qt開啟多線程,主要用到類QThread。用一個類繼承QThread,然后重新改寫虛函數run()。具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • C++利用MySQL API連接和操作數據庫實例詳解

    C++利用MySQL API連接和操作數據庫實例詳解

    這篇文章主要介紹了C++利用MySQL API連接和操作數據庫實例詳解的相關資料,需要的朋友可以參考下
    2017-01-01
  • C++拋出和接收異常的順序

    C++拋出和接收異常的順序

    這篇文章主要介紹了C++拋出和接收異常的順序,幫助大家更好的理解和學習C++,感興趣的朋友可以了解下
    2020-08-08
  • 淺談C++中thread庫join和detach的區(qū)別

    淺談C++中thread庫join和detach的區(qū)別

    這篇文章主要為大家介紹了C++中thread庫join和detach的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11

最新評論