知识点1 const修饰成员
使用const修饰成员函数时,const修饰this指针指向的内存区域,成员函数体内不可以修改本类中的任何普通成员变量(当成员变量类型符前面使用mutable修饰除外)
const修饰的对象叫做常对象,比如const int num = 10,系统不会给num开辟空间,num会被放入符号表中,后期对num取地址&num时才会给num开辟空间。
常对象只能够调用const修饰的成员函数进行遍历,普通的成员函数系统会默认有修改数据的可能而不能调用。
知识点2 友元
c++允许使用友元访问私有数据
语法:firend只出现在声明处,其他类、类成员函数、全局函数都可以被声明为友元。友元函数不是类的成员,不带this指针。但是友元函数可以访问对象的任意成员属性,包括私有的属性。
使用普通全局函数作为类的友元
#include <iostream>
#include <string>
using namespace std;
class Room
{
friend void friendVisit(Room &room);
private:
string bedRoom;
public:
string sittingRoom;
public:
Room()
{
this -> bedRoom = "卧室";
this -> sittingRoom = "客厅";
}
};
void friendVisit(Room &room)
{
cout << "访问了你的" << room.sittingRoom << endl;
cout << "访问了你的" << room.bedRoom << endl;
}
int main()
{
Room myRoom;
friendVisit(myRoom);
return 0;
}
一个类的某个成员函数作为另一个类的友元
#include <iostream>
#include <string>
using namespace std;
class Room;//必须先声明这个类不然下方visit函数中的room不识别
class Friend
{
public:
void visitor1(Room &room);
void visitor2(Room &room);
};
class Room
{
friend void Friend::visitor2(Room &room);//必须要加上作用域
private:
string bedRoom;
public:
string sittingRoom;
public:
Room()
{
this -> bedRoom = "卧室";
this -> sittingRoom = "客厅";
}
};
void Friend::visitor1(Room &room)
{ //不识别sittingroom和bedroom这两个成员,只能放到类下方访问
cout << "1访问了你的" << room.sittingRoom << endl;
//cout << "1访问了你的" << room.bedRoom << endl;//不是友元函数不能访问
}
void Friend::visitor2(Room &room)
{
cout << "2访问了你的" << room.sittingRoom << endl;
cout << "2访问了你的" << room.bedRoom << endl;
}
int main()
{
Room myRoom;
Friend myFriend;
myFriend.visitor1(myRoom);
myFriend.visitor2(myRoom);
return 0;
}
一整个类作为另外一个类的友元,那么这个类的所有函数都可以访问另外一个类的私有成员