码迷,mamicode.com
首页 > 其他好文 > 详细

09. 友元,引用计数

时间:2020-05-15 09:42:38      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:div   类的成员   null   end   引用   private   asp   引用计数   控制   

1.友元

1.1可以访问所有成员(公有,私有)

2.1友元不是类的成员,也不受它所在区域访问控制级别的约束

2.2普通函数,类的成员函数,整个类都可以声明为友元

2.3友元破坏了封装性,不到万不得已不要用

2.4运算符重载时适合用友元

class HasPtr;//前向声明

class Test {
public:
	void Test1();//不能在此处写创建HasPtr对象的函数实现,因为HasPtr尚未给出定义,编译器不清楚它的成员和size。
	void Test2();
private:
	HasPtr *pointer;//指针或引用可以,即使HasPtr尚未给出定义
};

class HasPtr {
	friend void Test::Test1();//成员函数作为友元,Test类中其他未声明为友元的函数不能访问HasPtr的私有成员
	//friend Test;//类作为友元,Test类中都能访问HasPtr的私有成员
	friend int main();//声明main函数是友元
	friend void Foo() {//类内部定义了友元,是全局函数,使用前需要再声明
		HasPtr foo;
		foo.count = 99;
	}
	
public:
	HasPtr(int *p = nullptr, int n = 0) :ptr(p), count(n) {}

private:
	int *ptr;
	int count;
};

void Test::Test1() {//此处有完整的HasPtr的定义了,可访问
	HasPtr ptr;
	ptr.count = 0;
}

void Foo();//使用前需要再声明

int  main() {
	HasPtr ptr;
	ptr.count = 124;//可以直接访问私有成员
	Foo();//使用全局函数
	return 0;
}

  

09. 友元,引用计数

标签:div   类的成员   null   end   引用   private   asp   引用计数   控制   

原文地址:https://www.cnblogs.com/Nutshelln/p/12892712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!