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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章