前言:內部類,顧名思義是定義在類中的類,許多人會以為它屬于外部的類,實際上并不是,它們是兩個獨立的類,但是內部類受外部類類域的限制。
目錄
- 一.概念
- 二.特性
- 1.內部類和外部類相互獨立
- 2.內部類是外部類的友元類
- 三.舉例
一.概念
如果一個類定義在另一個類的內部,這個類就叫做內部類。但是內部類是一個獨立的類,它不屬于外部的類,更不能通過外部類的對象去訪問內部類的成員。外部類對內部類沒有任何優越的訪問權限。
class A {
public:class B {private:int _b = 2;};
private:int _a = 1;
};int main()
{A aa; //A類實例化對象aa//B bb; //報錯,B類受A類類域限制A::B bb; //B類實例化對象bbreturn 0;
}
二.特性
1.內部類可以定義在外部類的public,protected,private都是可以的。
2.注意內部類可以直接訪問外部類中的static成員,不需要外部類的對象/類名。
3.sizeof(外部類) = 外部類,和內部類沒有任何關系,證明了它們是兩個獨立的類。
4。內部類是外部類的友元類,因而內部類可以通過外部類的對象參數來訪問外部類中的所有成員,但是外部類不是內部類的友元。
1.內部類和外部類相互獨立
class A {
public:class B {private:int _b = 2;int _c = 3;};
private:int _a = 1;
};int main()
{cout << sizeof(A) << endl;cout << sizeof(A::B) << endl;return 0;
}
控制臺輸出如下:
可以看到,B為A的內部類,但是A的內存為4個字節,B的內存為8個字節。說明A和B是獨立的類。
2.內部類是外部類的友元類
class A {
public:class B {public:void FuncB(){A aa; // 在B類中調用A類aa._a = 2; //訪問A類成員變量}private:int _b = 2;};void FuncA() {B bb;// bb._b = 2; A不是B的友元類,不能通過B對象參數訪問B中成員}
private:int _a = 1;
};
三.舉例
以牛客網的一個題目(超鏈接)為例,展示內部類的用處:
題解:
涉及知識點:構造函數,靜態成員,內部類
class Solution {class sum{public:sum() //構造函數{ _ret += _tmp;_tmp++;}};
public:int Sum_Solution(int n) {sum arr[n];return _ret;}static int _ret; //靜態成員變量static int _tmp;
};
int Solution::_ret = 0; //靜態成員變量在類外定義初始化
int Solution::_tmp = 1;
文末BB:對哪里有問題的朋友,盡管在評論區留言,若哪里寫的有問題,也歡迎朋友們在評論區指出,博主看到后會第一時間確定修改。最后,制作不易,如果對朋友們有幫助的話,希望能給博主點點贊和關注.