C++學習筆記 —— 函數默認值、static、友元

函數默認值

void func(int a, int b = 10, int c =1)
{
	cout<< a + b + c << endl;
}

若一個函數參數設置爲默認值,則他後面的參數都需要設置。
如果傳入參數則使用傳入的,如果沒有傳入則使用默認值。
函數默認值設置後,則該函數設置重載就可能發生錯誤,所以在設計該函數時候,如果使用“默認參數”就不要使用“函數重載”。
函數重載的實現原理是編譯器會把不同的重載函數改爲不同的函數名。

static

C++中類的(static)靜態成員變量與(static)靜態成員函數

靜態成員變量

#include <iostream>

using namespace std;

class Person
{
public:
	//static int m_Age = 10;// 加入static就是靜態成員變量,只能在類內聲明,類外初始化。
	static int m_Age;
};
int Person::m_Age = 0; //類的靜態成員變量需要在類外部分配內存空間,編譯階段分配內存。然後就可以通過類名訪問。

int main()
{
	Person p1;
	p1.m_Age = 10;

	Person p2;
	p2.m_Age = 20;

	cout << p1.m_Age << endl; //20
	cout << p2.m_Age << endl; //20

	//通過類名直接訪問:通常靜態的都是類名進行訪問
	cout << Person::m_Age << endl; //20
}

靜態成員函數

#include <iostream>

using namespace std;

class Person
{
public:
	//靜態成員函數不可以訪問普通成員變量,只能訪問靜態成員變量
	//而普通成員函數可以訪問靜態成員變量
	static void func()
	{
		cout << "靜態成員函數" << endl;
	};
	static void func2();
};
void Person::func2()
{
	cout << "靜態成員函數2" << endl;
}

int main()
{
	Person p1;
	p1.func();
	Person::func();
	Person::func2();
}

引出

類的私有成員是private的,只在類內部使用,但是有的時候需要外部特殊的進行訪問,我們可以使用友元。

比如:一個房子,客廳是public大家都可以來,而臥室是private只有自己人能進。但是好閨蜜好基友來了想進去看看,這就是友元。

友元

友元函數(friend)修飾的普通函數,可直接訪問類的保護數據。避免了類成員函數的頻繁調用,節省處理器開銷。但是矛盾的是他破壞了類的封裝性,所以現在cpu越來越快的今天,並不推薦使用它。
友元 c++
c++中友元函數理解與使用

#include <iostream>

using namespace std;

class Room
{
public:
	string m_sittingRoom;					 //客廳
	void disp();							 //類成員函數
	friend void set_show(string s, Room &r); //友元函數聲明
private:
	string m_BedRoom; //臥室
};
//類成員函數定義
void Room::disp()
{
	//因爲是類內的,所以可以直接使用私有變量
	cout << m_BedRoom << "--" << m_sittingRoom << endl;
}
//友元函數定義:他只是一個普通函數,但是在類中聲明瞭友元,所以他可以使用類中私有成員
//友元函數的具體實現:這裏沒有類限定這種形式,這裏可以與上面的disp()做個對比,一個屬於類的成員,所以友元函數調用的時候需要對象調用
void set_show(string s, Room &r)
{
	r.m_BedRoom = s;
	cout << r.m_BedRoom << endl;

	Room r2;
	r2.m_BedRoom = "da";
}

void originalFunc()
{
	Room r3;
	//r3.m_BedRoom  錯誤,普通函數訪問不到private變量
}

int main()
{
	Room room;
	//room.set_show()  錯誤,友元函數不是成員函數,不能訪問到
	set_show("臥室", room);
	originalFunc();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章