C++學習筆記
類和對象(一)
1. C語言和C++語言的區別:C語言是面向過程的語言,C++是面向對象的語言。
2. C++(面向對象)的三大核心概念:封裝、繼承、多態 + C++標準新特性(命名空間
namespace string)、STL(vector、list、map)。
3. C語言的結構體和C++的類的區別:C語言結構體成員的默認訪問權限為共有,而C++的成員的默
認權限為私有。
4. 封裝:a. 把變量和函數寫在一個類中,實現封裝 b. 把不想暴露在外界的成員私有化private;
封裝性把數據與操作數據的函數組織在一起,不僅是程序結構更加緊湊,並且提高了類內
部數據的安全性。
繼承:子類繼承父類的成員,代碼複用;繼承性增強了軟件的可擴充性以及代碼重用性。
多態:父類的指針或引用有多種的表現形態,用父類的指針或引用統一操作各種子類對象。
多態性使設計人員在設計程序時可以 對問題進行更好的抽象,有利於代碼的維護和可
重用。
5. 兩種編程思想:面向過程的語言(C語言),面向對象的語言(C++,Java,Objective-C)。
6. 面向過程的編程通常把程序分為三個步驟:(1)、輸入數據 (2) 、計算 (3)、輸出結果
7. 類與對象的關係總結:類是對象的抽象類型,對象是類的具體實例,如人是張三的類型,張三是
一個具體的人,因此說人是類型,張三是具體的一個對象。
8. 編程工具: (1)、vc++6.0; (2)、 vs; (3)、xcode;
9. C++的類通常由兩個部分組成:(1) 成員變量 一般是私有的; (2) 成員函數—操作成員
變量的 一般公有的。
10. 成員函數的實現可以直接在類內部實現或在類外部實現但是要在每一個函數名前加類名作用域
符號,void Point::setX(float a)。
11. 聲明類的時候一般類名首寫字母大寫,如class Point{}、 class Person{}等。
12. 構造函數是一種比較特殊的成員函數,用於創建並初始化對象。聲明對象時構造函數會被編譯
器自動調用。
構造函數的四個特點:
(1)、構造函數的訪問權限必須是公有(public);
(2)、構造函數名和類名相同;
(3)、構造函數沒有返回值;
(4)、構造函數可以帶參數,用於初始化成員變量。
13. 默認構造函數分兩種:1.構造函數不帶參數;2.構造函數帶參數但參數都有默認值。
默認構造函數時指在聲明對象時,可以不傳遞參數,使用空值或默認值對對象進行初始化,而普
通構造函數在聲明對象是必須傳遞參數(實參),否則構造函數的參數(形參)沒有值,編譯出
錯。
類和對象(二)
14. 函數重載的概念:在同一個作用域中,可以有一組具有相同函數名,不同參數列表的函數,這
組函數被稱為重載函數。參數列表不同是指參數的個數或參數的類型不同,如:
void f();
void f(int x);
void f(int x, int y);
如果僅僅是函數的返回值類型不同,不能是函數的重載:
void f(int x);
int f(int x);
這兩個函數不是函數的重載,在同一個作用域內是不能共存的,因為在函數調用時不知道該調用
哪一個函數。
15. (1) 類中可以定義多個構造函數,但是必須能夠構成函數重載;
(2)聲明對象時的參數類型和個數要與構造函數的參數進行匹配。
16. 構造函數中對類的成員變量兩種初始化的方式:
第一種方法:在構造函數體內通過賦值語句初始化
Thing(int a,int b,int c){x=a;y=b;z=c;}
第二種方法:使用初始化列表形式初始化
Thing(int a,int b,it c):x(a),y(b),z©{ }
程序中使用初始化列表的三個原因:
(1)、對於類類型的成員,使用初始化列表效率更高;
(2)、有些類型的成員變量必須使用初始化列表的形式初始化。如const成員、引用成員;
(3)、在繼承時,子類的構造函數中初始化父類的成員時。
17. 複合類:也叫做組合類,是指將一個類的對象作為另一個類的成員變量。
18.析構函數:創建對象時系統會自動調用構造函數進行初始化工作,同樣,銷燬對象時系統也會
自動調用一個函數來進行清理工作(回收對象佔用的內存空間),這個函數被稱為析構函
數。
析構函數(Destructor)也是一種特殊的成員函數,沒有返回值,不需要用戶調用,而是在
銷燬對象時自動執行。與構造函數不同的是,析構函數的名字是類名前面加一個"~"符號,
e.g:~Circle();
析構函數的四個特點:
(1) 沒有返回值;
(2) 無參;
(3) 不能被重載(唯一);
(4) 必須公有。
如果類中有指針成員變量,並且指針指向堆空間,那麼程序員必須顯示地聲明析構函數,釋放指針指向的堆空間,避免內存洩漏。
析構函數示例:
析構函數必須存在的情況:
類和對象(三)
19.類和對象的使用:和結構體一樣,一個類的對象也可以以值、指針或者引用的形式作為函數的參
數或返回值。一般情況下,為了避免創建臨時對象通常傳對象的引用,並且為了避免在函數體內修
改對象的值,通常使用常引用。
const Point middle(const Point& p1, const Point& p2);
如果函數以傳值形式返回一個類的對象,編譯器會創建一個臨時對象來保存這個值。
但有些編譯器會做優化。
20.淺拷貝:可以把一個對象賦值給另外一個對象,對象的每個成員的值,將一對一的拷貝到新的對
象。這種拷貝叫做邏輯拷貝,或淺拷貝。但是,如果對象含有指針成員變量,而指針變量又指向
堆上空間,將只拷貝指針成員變量本身的值,造成兩個對象的指針指向同一塊堆上的內存空間,刪
除對象時造成二次刪除。
21.const關鍵字:const是c/c++中保留的一個關鍵字,它用來限定一個變量是隻讀的,即不可變得。 程序中使用const可以在一定程度上提高程序的健壯性。
const關鍵的作用:
(1) const定義常量,const float pi=3.14;其值不能被改變;
(2) const與指針,常量指針和指針常量;
(3) const與函數,const int func(const int &a)const;
a.修飾形參時,形參不能被修改
b.修飾成員函數時,函數體內不能修改成員變量的值。
(4) const對象const Point p; 常量對象
const對象只能調用const成員函數,不能調用普通成員函數。
普通對象既可以調用const成員函數,也可以調用普通成員函數。
22.this指針:每一個對象都“包含”一個指針指向對象自身,稱之為this指針。
當對象調用成員函數時,會默認將對象自身傳遞給該函數,在函數體內不直接使用對象名,
而是使用this指針,即this指針,即this指針指向對象,指向調用者
23.靜態局部變量:函數結束後,靜態局部變量的內存空間不會被系統回收,下一次調用函數時使用
上一次退出時的值。
(1) 靜態局部變量存儲在靜態存儲區;
(2) 靜態局部變量在函數結束後內存空間不會被回收,下次使用時可以保留上一次的計算結果,這
與全局變量很相似;
(3) 靜態局部變量如果未進行初始化,會被編譯器初始化為0或NULL;
24.靜態全局變量:靜態全局變量只能在它所聲明的文件中使用,不能被extern關鍵字引用;
靜態全局變量與全局變量的區別:生命週期不變,作用域會減小。
25.類的靜態成員變量與非靜態成員變量的區別:
每一個對象都會為它的非靜態成員變量在內存中保留一塊空間來存儲各自的值,而對於類的靜態
成員變量整個類中只有一份拷貝,所有的對象都共享這塊空間。
類的靜態成員的訪問:
方式一:類名::靜態成員名 Student::teacherName;
方式二:對象名.靜態成員名 Student s1; s1.teacherName;
推薦使用方式一來訪問,因為靜態成員屬於整個類,而不是某一個特定的對象。
類的靜態成員變量必須在類外使用類名+作用域符號進行初始化,如:
char *Student::teacherName="";
靜態成員函數只能訪問靜態成員,不能訪問非靜態成員,普通函數既可以訪問靜態成員也可以
訪問非靜態成員。
26.友元函數可以訪問類的私有成員,但是注意友元函數不是類的成員函數。一個類也可以作為另一
個類的友元類,也就意味著這個類中所有的成員函數時另一個類的友元函數。
最後,如果你想學C/C++可以私信小編“01”獲取素材資料以及開發工具和聽課權限哦!
閱讀更多 編程小新 的文章
關鍵字: Objective-C 設計 語言