溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發(fā)布時間:2022-05-27 11:42:50 來源:億速云 閱讀:207 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹了C++類的對象作類成員調用構造、析構函數及靜態(tài)成員實例分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C++類的對象作類成員調用構造、析構函數及靜態(tài)成員實例分析文章都會有所收獲,下面我們一起來看看吧。

類對象作為成員

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();
}

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

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

析構的順序相反

靜態(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++類的對象作類成員調用構造、析構函數及靜態(tài)成員實例分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C++類的對象作類成員調用構造、析構函數及靜態(tài)成員實例分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI