目錄
0.引言
1.初始化列表
2.static
靜態成員變量:
靜態成員函數:
3.友元函數
4.內部類
定義:
特點:
應用:
5.優化寫法
6.例題? ?求和1+2+...+n? (不能用for/while/if/else等關鍵字)
7.總結
0.引言
今天,咱接著上文,繼續來嘮嘮類和對象中的易錯知識點😄😄😄
1.初始化列表
🚩形式:類名(類型名 參數):成員變量名(形參1),成員變量名(形參2)...{}
? ?// eg: A ( int? a) : _a1(a),_a2(a1){}
class A
{
public:
A ( int? a) : _a1(a),_a2(a1){}
private:
int _a1;
int _a2;? ? //★?tip:初始化列表列表順序盡量與聲明順序一致,因為初始化是按聲明順序進行的。
}
🚩必須要使用初始化列表的情況:1)引用成員變量;2)const成員變量;3)沒有默認構造的類類型。
🚩成員變量走初始化列表的邏輯順序:👇👇👇
2.static
靜態成員變量:
?靜態成員變量不屬于某個對象,屬于整個類(這個類的所有對象);
?靜態成員變量需要在類外初始化。
靜態成員函數:
?靜態成員函數沒有this指針;
?非靜態成員函數可以訪問靜態成員變量,靜態成員函數只能訪問靜態成員變量。
static int GetCount()
{
? ?// ++_a1;? ?// 不能訪問非靜態成員變量,沒有this指針
?return? _count;
}
3.友元函數
🚩形式:在函數/類聲明前+friend(友元函數聲明位置可以任意,不受類訪問限定符限制)
🚩友元函數僅僅是一種聲明,它不是類的成員函數;
🚩友元函數調用時,與普通函數類似,不會調用this指針(因為它不屬于類)
🚩外部友元函數可以訪問類的所有成員,但是,它是單向的(即A是B 的友元函數,A可以訪問B的私有成員變量;但是B不一定能訪問A);
🚩友元關系不能傳遞?。
4.內部類
定義:
一個類定義在另一個類的內部,這個內部類就叫做內部類。
特點:
?只是受外部類類域限制和訪問限定符限制,所以外部類定義的對象中不包含(不會額外開辟資源)內部類;
?內部類默認是外部類的友元類;
?內部類是平行關系(獨立開),主要是受類域和訪問限定符限制。
應用:
?當A類跟B類緊密關聯,A類實現出來主要就是給B類使用,那么可以考把A類設計為B的內部類;
? A如果放到B類的private/protected位置,那么A類就是B類的專屬內部類,其他地方都用不了。
5.優化寫法
?匿名對象(生命周期只在當前一行)
eg:
A();
A(11);
??傳值傳參
// 傳值傳參 ->無優化
? ?A aal(1);
? ?f1(aa1);? ? ? ? ? ? ? ? ? ? //不推薦?? ?cout<<endl;? ? ?
// 構造+拷貝構造﹣>優化直接構造
f1(A(1));? ? ? ? ? ? ? ? ? ? ?//推薦 ?
cout << endl << endl;?//?f1(1);? ? ? ? ? ? ? ? ? ? ? ??//推薦 ?
?返回
?// 一個表達式中,連續拷貝構造+賦值
A aa3;
?aa3=f2();? ? ? ? ? ? ? ? ? ? //不推薦? ?cout << endl;
? // 返回時一個表達式中,連續拷貝構? ?
A aa2 = f2();
?cout << endl ;? ? ? ? ? ? ??//推薦 ?
6.例題? ?求和1+2+...+n? (不能用for/while/if/else等關鍵字)
核心代碼👇👇👇
#include <iostream>class Sum
{public:Sum(){_ret+=_i;_i++;};static int Getret(){return _ret;}private:static int _i;static int _ret;
};
int Sum ::_i=1;
int Sum ::_ret=0;
class Solution {
public:int Sum_Solution(int n) {Sum a[n];return Sum::Getret();}
};int main()
{
Solution s;
int n = 100;
int result = s.Sum_Solution(n);
cout<< "The sum from 1 to "<< n << " is: " << result <<endl;
return 0;
在上述測試代碼中,創建 Solution 類對象 s ,調用 Sum_Solution 函數計算1到100的累加和并輸出。運行后會輸出1到100的累加和為5050(通過 Sum 類構造靜態成員函數的累加邏輯實現)。
7.總結
看了上面的代碼,咱們是不是覺得今天的知識點,得到了運用呢🤭
希望大家可以和小鄧兒一起學習和進步哈O(∩_∩)O
都看這么久了呢,別忘了一鍵三連哦😘😘😘