C++学习--友元函数

C++ 友元函数

一、全局函数做友元

友元函数可以访问类内部的私有成员属性,在类中使用friend关键字定义友元函数,并在全局中实现

代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;

class Person{   // 定义 Person 类
   friend void printField(Person *p);  // 定义友元函数,并在类外面实现

public:
   Person(){     // 构造函数初始换成员值
       name = "xiaokang";
       age = 29;
   }

public:
   string name;  // 名字
private:
   int age;    // 年龄
};

// 友元函数的实现
void printField(Person *p){ 
   cout << "name:" << p->name << endl;
   cout << "age:" << p->age << endl; // 友元函数打印 `Person` 类的私有属性 age
}

// 主函数
int main() {
   Person p; // 实例化Person类
   printField(&p);
   std::cout << "Hello, World!" << std::endl;
   return 0;
}

打印结果如下:

name:xiaokang

age:29

Hello, World!

二、类做友元

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
using namespace std;

class Building;  // 定义建筑类
class GoodGay{   // 定义`好基友`类
public:
   Building *building;  // 定义共有成员
   GoodGay();     // 构造函数
   void visit();  // 定义访问成员方法
};

class Building { // 实现建筑类
   friend class GoodGay;  // 定义`好基友`类为`友元`类
public:
   Building();  // 构造方法
   string sittingRoom; // 客厅
private:
   string bedRoom; //卧室
};

// 实现 GoodGay 的构造函数
GoodGay::GoodGay() { // 实现构造方法
   building = new Building;
}

void GoodGay::visit(){   //  访问 building对象内部的私有属性
   cout << "好基友当前访问的地方是:"<< building->bedRoom << endl;
}

Building::Building() {
   this->sittingRoom = "客厅";
   this->bedRoom = "卧室";
}

void test01(){
   GoodGay gg;
   gg.visit();
}

int main() {
   test01();
   std::cout << "Hello, World!" << std::endl;
   return 0;
}

打印结果如下:

好基友当前访问的地方是:卧室

Hello, World!

三、类成员函数做友元

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
using namespace std;

class Building;
class GoodGay{
public:
   Building *building;
   GoodGay();
   void visit();
};

class Building {
   friend void GoodGay::visit();  // 将成员函数定义为友元
public:
   Building();
   string sittingRoom; // 客厅
private:
   string bedRoom; //卧室
};

// 实现 GoodGay 的构造函数
GoodGay::GoodGay() {
   building = new Building;
}

void GoodGay::visit(){
   cout << "好基友当前访问的地方是:"<< building->sittingRoom << endl;

   //  访问 building对象内部的私有属性
   cout << "好基友当前访问的地方是:"<< building->bedRoom << endl;
}

Building::Building() {
   this->sittingRoom = "客厅";
   this->bedRoom = "卧室";
}

void test01(){
   GoodGay gg;
   gg.visit();
}

int main() {
   test01();
   std::cout << "Hello, World!" << std::endl;
   return 0;
}

打印结果如下: 好基友当前访问的地方是:客厅 好基友当前访问的地方是:卧室 Hello, World!

皖ICP备20014602号
Built with Hugo
Theme Stack designed by Jimmy