C+±学习记录-面向对象-友元2

一、友元的实现方式

1.全局函数做友元

2.类做友元

3.成员函数做友元

(1)、全局函数做友元

语法: friend 返回值类型 函数名(参数列表){ };

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class p {

friend void setp(p* p1);//将该函数设置为p类的友元

public:
string name;
protected:
string age;

};

void setp(p *p1) {
p1->name = "神里绫华";
p1->age = "十八岁";
}

(2)、类做友元(友元类)

语法:friend class 类名;

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class chara {
public:
string name;
private:
string weapon;
};

class search {
public:
void printinfo(chara* ch)
{
cout << "角色:" << ch->name << endl;
cout << "使用武器:" << ch->weapon << endl;
}
};
//此时编译器报错,因为chara类中的weapon为private

添加友元类之后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class chara {

friend class search;//添加search为友元类,此时不再报错

public:
string name;
private:
string weapon;
};

class search {
public:
void printinfo(chara* ch)
{
cout << "角色:" << ch->name << endl;
cout << "使用武器:" << ch->weapon << endl;
}
};

(3)、成员函数做友元

语法: friend 返回值类型 类名::函数名(参数列表);

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class chara {

friend void search::printinfo(chara* ch);//添加成员函数为友元

public:
string name;
private:
string weapon;
};

class search {
public:
void printinfo(chara* ch)
{
cout << "角色:" << ch->name << endl;
cout << "使用武器:" << ch->weapon << endl;
}
};

但是这样编译器依然会报错