C++学习笔记——函数默认值、static、友元

C++学习笔记——函数默认值、static、友元


2023年11月22日发(作者:p60华为)

C++学习笔记——函数默认值、static、友元

⽂章⽬录

函数默认值

void func(int a, int b = 10, int c =1)

{

cout<< a + b + c << endl;

}

若⼀个函数参数设置为默认值,则他后⾯的参数都需要设置。

如果传⼊参数则使⽤传⼊的,如果没有传⼊则使⽤默认值。

函数默认值设置后,则该函数设置重载就可能发⽣错误,所以在设计该函数时候,如果使⽤“默认参数”就不要使⽤“函数重载”。

函数重载的实现原理是编译器会把不同的重载函数改为不同的函数名。

static

静态成员变量

#include

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

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越来越快的今天,并不推荐使⽤它。

#include

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;

//_show() ,

错误友元函数不是成员函数,不能访问到

set_show("卧室", room);

originalFunc();

}


发布者:admin,转转请注明出处:http://www.yc00.com/num/1700606033a1013338.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信