NDK14_C++基础:友元

NDK开发汇总

一 友元

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

  • 类似 java 中享元模式:实例的共享(ImageLoader Lru 算法 存储图片)
  • 友元:类或函数的共享
  • 优点:提高效率、表达清晰
  • 缺点:破坏封装性
  • 特征:
    友元函数不能被派生类继承
    友元函数不能使用this

二 友元函数

#include <string>
#include <iostream>

using namespace std;

class Girl
{

public :
	friend void modify(Girl *girl ,int age);
	void tell();

private:
	int age = 16;
};

//Girl class的函数实现
void Girl::tell(){
	cout << "age == " << age << endl;
}

//没有限定符,外部实现
void modify(Girl *girl, int age) {
	girl->age = age;

}

void main() {
	Girl *girl = new Girl();
	girl->tell();

	modify(girl, 31);
	girl->tell();
	delete girl;
	system("pause");
}

运行结果:
age == 16
age == 31

2 友元类

  • 让其他类中的成员函数访问这个类中的私有函数

Class A 有属性 a,Class B可以访问 Class C不可以访问

#include <string>
#include <iostream>

using namespace std;

class Girl
{

public :
	friend class Boy;
	void tell();

private:
	int age = 16;
	string name= "tt";
};

//Girl class的函数实现
void Girl::tell(){
	cout << "age == " << age << endl;
}



class Boy
{
public:
	Boy(Girl girl) {
		this->girl = girl;
	}
	~Boy() {

	}
	void  changeGril() {
		girl.age = 20;
		girl.name = "xx";
	}
	//已经声明为友元类,可以访问和修改私有属性
	void introuduce() {
		cout << "My Gril friend name:" <<girl.name<<" age:"<< girl.age << endl;
	}

private:
	Girl girl;
};

void main() {

	Girl girl;
	Boy boy = Boy(girl);
	
	boy.introuduce();

	boy.changeGril();
	boy.introuduce();

	system("pause");
}

运行结果:
My Gril friend name:tt age:16
My Gril friend name:xx age:20

拓展: 实现类中的友元函数,friend void Boy::introduce();

猜你喜欢

转载自blog.csdn.net/baopengjian/article/details/105979451