C++类、函数、指针
1、初始化所有指針。
2、
(1)指向常量的指針:
(2)常量指針:指針本身為常量:
3、若循環體內部包含有向vector對象添加元素的語句,則不能使用范圍for循環。
4、字符數組要注意字符串字面值結尾處還有一個空字符。
5、數組的指針及數組的引用
6、C++中多維數組指的是數組的數組。
7、要使用for循環語句處理多維數組,除了最內層的循環外,其他所有循環的控制變量都應是引用類型。
8、異常檢測&異常處理
throw&try(catch)
9、如果函數無需改變引用形參的值,最好將其聲明為常量引用。
10、(1)構造函數
是成員函數的一種,可以有參數,不能有返回值(void也不行)。
作用是對對象進行初始化,例如給成員變量賦初值。若定義類時沒有寫構造函數,編譯器會生成默認的無參數的構造函數,不進行任何操作。
對象生成時構造函數自動被調用,對象一旦生成,就不能在其上執行構造函數。
一個類可以有多個構造函數。
(2)拷貝構造函數
幾個原則:
C++ primer p406 :拷貝構造函數是一種特殊的構造函數,具有單個形參,該形參(常用const修飾)是對該類類型的引用。當定義一個新對象并用一個同類型的對象對它進行初始化時,將顯示使用拷貝構造函數。當該類型的對象傳遞給函數或從函數返回該類型的對象時,將隱式調用拷貝構造函數。
X::X( X& ) X::X(const X &)二者選一,后者能以常量對象作為參數。
C++支持兩種初始化形式:
拷貝初始化?int a = 5;?和直接初始化?int a(5);?對于其他類型沒有什么區別,對于類類型直接初始化直接調用實參匹配的構造函數,拷貝初始化總是調用拷貝構造函數,也就是說:
A y = x; //拷貝初始化,是初始化語句非賦值語句,會調用拷貝構造函數,與下一條代碼等價 A y(x); //調用拷貝構造函數必須定義拷貝構造函數的情況:
只包含類類型成員或內置類型(但不是指針類型)成員的類,無須顯式地定義拷貝構造函數也可以拷貝;有的類有一個數據成員是指針,或者是有成員表示在構造函數中分配的其他資源,這兩種情況下都必須定義拷貝構造函數。
什么情況使用拷貝構造函數:
類的對象需要拷貝時,拷貝構造函數將會被調用。以下情況都會調用拷貝構造函數:
- (1)用一個對象去初始化同類的另一個對象。
- (2)若某一個函數有一個參數是類A的對象,那么該函數在被調用時,類A的拷貝構造函數將被調用。
- (3)如果函數的返回值是類A的對象,則函數返回時,A的拷貝構造函數將被調用。
(3)特殊的構造函數:類型轉換構造函數:
實現類型的自動轉換。
特點:只有一個參數,且不是拷貝構造函數。在使用時,編譯系統會自動調用,建立一個臨時對象/臨時變量。
(4)析構函數
特點:名字與類名相同;前面加~;沒有參數和返回值;一個類最多有一個析構函數。
對象消亡時自動被調用:釋放分配的空間
編譯期自動生成的缺省析構函數不涉及釋放用戶申請的內存釋放等清理工作。
對象數組的生命期結束時,對象數組的每個元素的析構函數都會被調用到。
先構造的后析構。
11、靜態成員 static:靜態成員變量、靜態成員函數,不需通過對象就能訪問,本質是全局的。
普通成員變量每個對象各自有一份,靜態成員變量一共一份,被所有成員共享。必須在定義類的文件中對靜態成員變量進行一次說明/初始化,否則編譯能通過,鏈接無法通過。
sizeof運算符不會計算靜態成員變量。
calss CMyclass {int n;static int s; }; 則 sizeof(CMyclass) = 4普通成員函數必須具體作用域某個對象,而靜態成員函數并不具體作用于某個對象。
- 靜態成員函數沒有 this 指針,只能訪問靜態成員(包括靜態成員變量和靜態成員函數)。
- 普通成員函數有 this 指針,可以訪問類中的任意成員;而靜態成員函數沒有 this 指針。
12、類的多繼承之環狀繼承
13、純虛函數
想要在基類中定義虛函數,以便在派生類中重新定義該函數更好地適用于對象,但是在基類中又不能對虛函數給出有意義的實現,這個時候就會用到純虛函數。
告訴編譯器,函數沒有主體,上面的虛函數是純虛函數。
?14、常引用不能對實參值進行改變。
指向常量的指針,也叫指針常量,該指針變量指向的是一個常量,指針所指的常量不允許改變,但是該指針可以指向其他地址。
常量指針又叫常指針,指的是聲明的一個指針變量是一個常量,不可通過常量指針改變其指向的內容。但是該指針所指的對象是可以發生改變的。
不能把常量指針賦值給非常量指針,反過來可以。除非強制類型轉換,例如:(int *)
函數參數為常量指針時,可以避免不小心改變參數指針所指向地址的內容。
15、用new實現動態內存分配
分配變量:P=new T; eg:
int *p; p=new int; *pn=5;分配數組:P=new T[N];
int *p; p = new int[100; p[10]=12;new的返回值類型 T*
用delete釋放內存空間:
delete p; delete []p;?16、內聯函數:
函數調用都是有開銷的,若某個函數執行快但被調用很多次,開銷大,使用內聯函數。編譯器處理對內聯函數的調用語句時,將整個函數代碼插入到調用語句處,而不會產生調用函數的語句。
inline int max(int a,int b) {if(a>b) return a;return b; }內聯成員函數:(1)inline? (2)將整個函數體放在類定義的內部
17、函數重載:一個多個函數,名字不同但參數個數或參數類型不同。
18、類成員可訪問范圍
public public protected
類的成員函數內部可以訪問:(1)當前對象的全部屬性、函數 (2)同類其他成員的全部屬性、函數
類的成員函數以外的地方只能訪問類對象的公有成員(public)
19、負數用十六進制表示,首先將其表示為二進制,變反碼再變補碼
20、成員對象
成員對象:一個類的成員變量是另一個類的對象。包含成員對象的類叫封閉類。
使用初始化列表設計封閉類的構造函數:類名::構造函數(參數表):成員變量1(參數表),成員變量2(參數表),......{......}
成員函數初始化列表里的參數:任意復雜的表達式;函數/變量/表達式中的函數,變量有定義。
當封閉類對象生成時,先執行所有成員對象的構造函數,再執行封閉類的構造函數。成員對象的構造函數調用順序與成員對象在類中的說明順序一致,與在成員函數初始化列表中出現的順序無關。
21、友元(friend)
(1)友元函數:一個類的友元函數可以訪問該類的私有成員;將一個類的成員函數(包括構造、析構函數)定義為另一個類的友元。
(2)友元類:A是B的友元類,則A的成員函數可以訪問B的私有成員。Note:友元類之間的關系不能傳遞、不能繼承。
22、this指針:指向成員函數所作用的對象
Note:靜態成員函數中不能使用this指針!因為靜態成員函數并不具體作用于某個對象,因此靜態成員函數的真實參數個數就是程序中寫出的參數個數。
23、常量
(1)常量對象 const
(2)常量成員函數:類的成員函數說明后面可以加const。
執行期間不應修改其所作用的對象,因此,常量成員函數中不能修改成員變量的值(靜態成員變量除外),也不能調用同類的非常量成員函數(靜態成員函數除外)。
Note:兩個成員函數,名字和參數表都一樣,但一個是const,則算函數重載。
(3)常引用 const int &r = n
不能通過常引用改變其引用的變量?,一般可作為函數參數。
void PrintObj(const Sample &o)轉載于:https://www.cnblogs.com/zhuzhudong/p/10453427.html
總結
以上是生活随笔為你收集整理的C++类、函数、指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工具-Xmind常用快捷键/使用
- 下一篇: 战力会议4