C++笔记4.43

知识点1 const修饰成员

使用const修饰成员函数时,const修饰this指针指向的内存区域,成员函数体内不可以修改本类中的任何普通成员变量(当成员变量类型符前面使用mutable修饰除外)

const修饰的对象叫做常对象,比如const int num = 10,系统不会给num开辟空间,num会被放入符号表中,后期对num取地址&num时才会给num开辟空间。

常对象只能够调用const修饰的成员函数进行遍历,普通的成员函数系统会默认有修改数据的可能而不能调用。

知识点2 友元

c++允许使用友元访问私有数据

语法:firend只出现在声明处,其他类、类成员函数、全局函数都可以被声明为友元。友元函数不是类的成员,不带this指针。但是友元函数可以访问对象的任意成员属性,包括私有的属性。

使用普通全局函数作为类的友元

  1. #include <iostream>  
  2. #include <string>  
  3.   
  4. using namespace std;  
  5.   
  6. class Room  
  7. {  
  8.     friend void friendVisit(Room &room);  
  9. private:  
  10.     string bedRoom;  
  11. public:  
  12.     string sittingRoom;  
  13. public:  
  14.     Room()  
  15.     {  
  16.         this -> bedRoom = "卧室";  
  17.         this -> sittingRoom = "客厅";  
  18.     }  
  19. };  
  20.   
  21. void friendVisit(Room &room)  
  22. {  
  23.     cout << "访问了你的" << room.sittingRoom << endl;  
  24.     cout << "访问了你的" << room.bedRoom << endl;  
  25. }  
  26.   
  27. int main()  
  28. {  
  29.     Room myRoom;  
  30.     friendVisit(myRoom);  
  31.     return 0;  
  32. }  

一个类的某个成员函数作为另一个类的友元

  1. #include <iostream>  
  2. #include <string>  
  3.   
  4. using namespace std;  
  5.   
  6. class Room;//必须先声明这个类不然下方visit函数中的room不识别  
  7.   
  8. class Friend  
  9. {  
  10. public:  
  11.     void visitor1(Room &room);  
  12.     void visitor2(Room &room);  
  13. };  
  14.   
  15. class Room  
  16. {  
  17.     friend void Friend::visitor2(Room &room);//必须要加上作用域  
  18. private:  
  19.     string bedRoom;  
  20. public:  
  21.     string sittingRoom;  
  22. public:  
  23.     Room()  
  24.     {  
  25.         this -> bedRoom = "卧室";  
  26.         this -> sittingRoom = "客厅";  
  27.     }  
  28. };  
  29.   
  30. void Friend::visitor1(Room &room)  
  31. {   //不识别sittingroom和bedroom这两个成员,只能放到类下方访问  
  32.     cout << "1访问了你的" << room.sittingRoom << endl;  
  33.     //cout << "1访问了你的" << room.bedRoom << endl;//不是友元函数不能访问  
  34. }  
  35.   
  36. void Friend::visitor2(Room &room)  
  37. {  
  38.     cout << "2访问了你的" << room.sittingRoom << endl;  
  39.     cout << "2访问了你的" << room.bedRoom << endl;  
  40. }  
  41.   
  42. int main()  
  43. {  
  44.     Room myRoom;  
  45.     Friend myFriend;  
  46.     myFriend.visitor1(myRoom);  
  47.     myFriend.visitor2(myRoom);  
  48.     return 0;  
  49. }  

一整个类作为另外一个类的友元,那么这个类的所有函数都可以访问另外一个类的私有成员

发表评论

邮箱地址不会被公开。 必填项已用*标注