C++複習筆記
基於物件的程式設計
物件導向程式設計有4個主要特點:抽象、封裝、繼承和多型性。
class 類名
{
private:
私有的資料和成員函式;
public:
共有的而資料和成員函式;
}
member access specifier: private, public, protected
一個C++程式是由3個部分組成的:
(1)類宣告檔案(字尾為.h)
(2)類實現檔案(字尾為.cpp)
(3)類的使用檔案(字尾為.cpp),即主函式檔案
用引數初始化表對資料成員初始化
例:Box::Box(int h, int w, int len):height(h),width(w),length(len){}
解構函式(destructor)
當物件的生命期結束時,會自動執行解構函式。具體地說如果出現以下4種情況,程式就會執行解構函式:
(1)如果在一個函式中定義了一個物件(假設是自動區域性物件),當這個函式被呼叫結束時,物件應該釋放,在物件釋放前自動執行解構函式。
(2)靜態(static)區域性物件在函式呼叫結束時物件並不釋放,因此也不呼叫解構函式,只在main函式結束或呼叫exit函式結束程式時,才呼叫static區域性物件的解構函式。
(3)如果定義了一個全域性的物件,則在程式的流程離開其作用域時(如main函式結束或呼叫exit函式)時,呼叫該全域性的物件的解構函式。
(4)如果用new運算子動態地建立了一個物件,當用delete運算子釋放該物件時,先呼叫該物件的解構函式。
每個成員函式中都包含一個特殊的指標,這個指標的名字是固定的,稱為this。它是指向本類物件的指標,它的值是當前被呼叫的成員函式所在的物件的起始地址。
常物件
1.常資料成員
只能通過建構函式的引數初始化表對常資料成員進行初始化,任何其他函式都不能對常資料成員賦值。
2.常成員函式
如果將成員函式宣告為常成員函式,則只能引用本類中的資料成員,而不能修改它們。
1.指向物件的常指標
例:Time * const ptrl;
2.指向常物件的指標
例 :const char * ptrl;
(1)如果一個變數已被宣告為常變數,只能用指向常變數的指標變數指向它,而不能用一般的指標變數去指向它。
(2)指向常變數的指標變數除了可以指向常變數外,還可以指向未被宣告為const的變數去指向它。
(3)如果函式的形參是指向普通變數的指標變數,實參只能用指向普通(非const)變數的指標,而不能用指向const變數的指標,這樣,在執行函式的過程中可以改編形參指標變數所指向的變數的值。
和靜態資料成員一樣,靜態成員函式是類的一部分,而不是物件的一部分。如果要在類外呼叫公用的靜態成員函式,要用類名和域運算子。
友元
1.友元函式
如果在本類以外的其他地方定義了一個函式(這個函式可以是不屬於任何類的非成員函式,也可以是其他類的成員函式),在類體中用friend對其進行宣告,此函式就稱為本類的友元函式。
2.友元類
將B類宣告為A類的友元類,那麼友元類B中的所有函式都是A類的友元函式,可以訪問A類中的所有成員。
類别範本
例:
template <class numtype>
class Compare
{
public :
Compare(numtype a, numtype b)
{
x=a;
y=b;
}
numtype max()
{
return(x>y)?x:y;
}
private:
numtype x,y;
};
運算子過載
過載運算子的函式一般格式如下
函式型別 operator 運算子名稱(形參表)
{對運算子的過載處理}
過載運算子的規則
(1)C++不允許使用者自己定義新的運算子,只能對已有的C++運算子進行過載
(2)C+允許過載的運算子
(3)過載不能改變運算子運算物件(即運算元)的個數
(4)過載不能改變運算子的優先順序別
(5)過載不能改變運算子的結合性
(6)過載運算子的函式不能有預設的引數、
(7)過載的運算子必須和使用者定義的自定義型別的物件一起使用,其引數至少一個是類物件(或類物件的引用)
(8)用於類物件的運算子一般必須過載,但有兩個例外,運算子“=”和“&”不必使用者過載
過載流插入運算子“<<”和流提取運算子“<<”
istream & operator >>(istream &, 自定義類 &)
ostream & operator <<(ostream &, 自定義類 &)
型別轉換函式
型別轉換函式的一般形式
operator 型別名()
{實現轉換的語句}
物件導向的程式設計
繼承與派生
一個派生類只從一個基類派生,這成為單繼承(single inheritance)
一個派生類有兩個或者多個基類的稱為多重繼承(multiple inheritance)
派生類是基類的具體化,而基類是派生類的抽象
派生類成員的訪問屬性
1.公用繼承(public inheritance)
基類的公有成員和保護成員在派生類中保持著原有訪問屬性,其私有成員仍為基類私有
2.私有繼承(private inheritance)
基類的共有成員和保護成員在派生類中成了私有成員。其私有成員仍為基類私有。
3.受保護的繼承(protected inheritance)
基類的公有成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有。
保護成員的意思是:不能被外界引用,但是可以被派生類的成員引用。
派生類建構函式一般形式為
派生類建構函式名(總參數列):基類建構函式名(參數列)
{派生類中新增資料成員初始化語句}
虛基類(virtual base class)
C++提供虛基類的方法,使得在繼承簡介共同基類時只保留一份成員
在最後的派生類中不僅要負責對其直接基類進行初始化,還要負責對虛基類初始化
多型性與虛擬函式
多型性: 向不同的物件傳送同一個訊息,不同的物件在接受時會產生不同的行為。
在C++中,多型性表現形式之一是:具有不同功能的函式可以用一個函式名,這樣就可以實現用一個函式名呼叫不同內容的函式。
虛擬函式:所謂虛擬函式,就是在基類宣告函式是虛擬的,並不是實際存在的函式,然後在派生類中才正式定義此類函式
純虛擬函式與抽象類
virtual 函式型別 函式名(引數列表)=0;
相關文章
- Redis 複習筆記Redis筆記
- MyBatis複習筆記MyBatis筆記
- SpringMVC複習筆記SpringMVC筆記
- FFT & NTT 複習筆記FFT筆記
- C++學習筆記——003C++筆記
- C++學習筆記——001C++筆記
- OI學習筆記(C++)筆記C++
- c++學習筆記(三)C++筆記
- c++學習筆記(五)C++筆記
- c++學習筆記(四)C++筆記
- C++學習筆記——C++ 繼承C++筆記繼承
- C++學習筆記-Cherno C++系列C++筆記
- 複習電商筆記-1筆記
- html+css複習筆記HTMLCSS筆記
- 動態dp複習筆記筆記
- 康託の複習筆記筆記
- C/C++學習筆記:字串C++筆記字串
- C++ Primer Plus 第四章 複合型別 學習筆記C++型別筆記
- Python複習筆記跳躍版Python筆記
- Ubuntu複習筆記-認識LinuxUbuntu筆記Linux
- 隨機過程複習筆記隨機筆記
- C/C++學習路線———學習筆記C++筆記
- C++學習筆記(二)——函式C++筆記函式
- c++學習筆記 — inline這玩意C++筆記inline
- C/C++複習C++
- OCP 複習筆記之PL/SQL (1)筆記SQL
- OCP 複習筆記之PL/SQL (3)筆記SQL
- Redis學習筆記(十三) 複製(下)Redis筆記
- OCP 複習筆記之PL/SQL (2)筆記SQL
- OCP 複習筆記之PL/SQL (4)筆記SQL
- OCP 複習筆記之PL/SQL (5)筆記SQL
- Android程式間通訊(複習筆記)Android筆記
- 計算機網路複習筆記計算機網路筆記
- C++ 學習筆記之——STL 庫 queueC++筆記
- C++學習筆記----讀寫檔案C++筆記
- C++筆記C++筆記
- C++複習考點C++
- 【C++複習】棧-上篇C++