c++基础复习——友元

在程序中,有时候我们需要类外的特殊函数或者类也可以访问私有熟悉,这时候就要友元技术

友元的目的就是让一个函数或者类能够访问另一个类中的私有成员。

友元的三种实现:

  • 全局函数做友元
  • 类做友元
  • 成员函数做友元
#include <iostream>
#include <string>
using namespace std;

/*成员函数做友元*/
class myfriend2
{
public:
	myfriend2();
	void visit2();
	void visit3();
	Home* p;
};

myfriend2::myfriend2()
{
	this->p = new(Home);
}

void myfriend2::visit2()
{
	cout << "i'm visiting " << p->A << endl;
}

void myfriend2::visit3()
{
	cout << "i'm visiting " << p->B << endl;
}

/*主要的类*/
class Home
{
	friend void test1();  //全局函数做友元
	friend class myfriend; //类作为友元
	friend void myfriend2::visit3(); //成员函数做友元(记住此时的myfriend2类必须定义在前面,不然就是只有声明而没有定义)
public:
	Home(string a, string b);
	string A;
private:
	string B;
};

Home::Home(string a = "sittingroom", string b = "bedroom"): A(a), B(b) {} //提供了有参构造函数,不会再提供无参构造函数

class myfriend
{
public:
	myfriend();
	void visit();
	Home* p;
};

/*类做友元*/
myfriend::myfriend()
{
	this->p = new(Home);
}

void myfriend::visit()
{
	cout << "i'm visiting " << p->A << endl;
	cout << "i'm visiting " << p->B << endl;
}

/*全局函数做友元*/
void test1()
{
	Home p;

	cout << "home's a is " << p.A << endl;
	cout << "home's b is " << p.B << endl;
}

void test2()
{
	myfriend p;
	p.visit();
}

void test3()
{
	myfriend2 p;
	p.visit2();
	p.visit3();
}

int main()
{
	test1();
	test2();
	test3();

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值