关于友元的使用
1.友元的背景:C++提供了三大访问控制权限用于控制类外,类内,子类内对成员的访问的控制.
2.友元就是一个类对某个对象授予所有的访问控制权限
3.友元能够授予权限的对象:
class MyClass{int m_nNum;static int m_staticNum;// 声明一个友元类: friend class 类名;// 作用: 该类所有成员函数都能访问本类的// 私有成员.friend class Class2; }; int MyClass::m_staticNum;class Class2{ public:void fun(MyClass& obj){// 声明友元类之后, 就能在成员函数中// 去访问MyClass类的私有变量obj.m_nNum = 0;} };
Test1.h文件#pragma once#include "Test2.h"class Test1{private :int nums;public:Test1();~Test1();friend void Test2::fun();}; Test2.h文件#pragma onceclass Test2{public:Test2();~Test2();void fun();}; Test2.cpp文件#include "Test2.h"#include "Test1.h"Test2::Test2(){}Test2::~Test2(){}void Test2::fun(){Test1 test;test.nums = 10;} //在Test2.h文件中不包含Test1.h的内容防止相互包含 //应该在Test2.cpp文件中进行包含Test1.h的内容 //解决两个类相互包含的问题 Test2.h文件#pragma onceclass Test1;//这里前置声明Test1是一个类class Test2 {private:Test1 *test;//这里使用Test1的指针,因为只声明Test1是一个类,但是并没有具体的定义,所以这里只能使用指针,而在Test.cpp文件中就应该引入完整的Test1类也就是Test1.h文件public:Test2();~Test2();void fun();}; Test2.cpp文件#include "Test2.h"Test2::Test2(){}Test2::~Test2(){}void Test2::fun(){// Test1 test;// test.nums = 10;} Test1.h文件#pragma once#include "Test2.h"//另一个类直接包含整个Test2.h文件class Test1{private :int nums;public:Test1();~Test1();friend void Test2::fun();};
总结
- 上一篇: 使用递归的方式实现简易的二分法
- 下一篇: 类中的多种构造函数