关于友元的使用
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();};?
總結
- 上一篇: 使用递归的方式实现简易的二分法
- 下一篇: 类中的多种构造函数