構造函數
拷貝構造: 用一個對象 實例化另外一個兌現的時候會進入構造
析構函數
類的成員變量 只能在構造函數初始化(靜態成員變量除外)
類的參數列表的使用:
person(int age,float height):_age(age),_height(height)
Const的用法:
1.const 修改變量 變量的值不能被修改
2.const 修飾函數的參數 表示在函數體內參數不修改
3.const 修改類的成員變量 該變量的初始化 必須要在參數列表中初始化
4.const 寫在函數的后面 “void test() const” 函數只能使用類的成員變量 不能改變
5. const 修飾類的對象時 該對象只能調用 帶有const 的函數 ??
類的強制類型轉化:
? ? ??
靜態函數 & 友元函數
?Class Preson{}
? ? 1.靜態函數 的調用(::) ?靜態函數 只能訪問靜態變量 ?只能調用靜態函數 和全局函數
? ?2.友元函數 ?friend
類的繼承
類函數的重載和覆蓋
? ?函數的覆蓋 子類的函數和父類的函數完全一樣的化 子類的函數覆蓋父類的方法
? ?父類的指針 或引用 可以指向子類的對象
rtti ? run time type information
dynamic_cast<T> ?動態類型轉換 Csub* obj= dynamic_cast<Csub*>(obj1)
當用到rtti 時Base類必須包含虛函數
虛函數(virtual )
析構&虛構造
?構造函數不能是虛函數 ?析構函數可以為虛函數
當類有派生時 要注意把Base的析構函數聲明為虛函數。
純虛函數&抽象類
? ?如果一類中包含純虛函數 則這個類為抽象類?
? ?抽象類不能被聲明和初始化 ?只能作為基類使用,如果繼承抽象類的子類沒有實現基類的純虛函數則 該子類也時抽象類。
? 純虛方法的定義
? ? ? ?virtual void FunctionName(int i)=0;
內存的使用:
? ? ?new ?delect 和?malloc free ?兩組申請內存和釋放內存的區別:
? ? ? ? ?1. new ?和 delect 是C++的內存管理api ,malloc ?free 是C的原生API 所以在C++中使用的時候要添加頭文件
? ? ? ? ?2. new 和 delect 申請和釋放內存的對象是一個類時,會調用這個類的構造函數和析構函數 ? ? malloc 和 free 不會調用 類的構造函數和析構函數
? ? ? ? ?3. malloc 和 free 申請內存的效率更高
? ? ? ? ?4. 在面象對象編程的過程中推薦使用new 和delect 來管理內存
命名空間的使用:
? ? ? 1.命名空間的定義可以進行分級定義命名空間
? ? ? 2.命名空間不建議使用為全局的(即寫在所有函數體外 ? 建議放在類的內部,或函數體的內部使用)
C++的異常和處理
? ? ? 定義拋出異常的函數 ?void test(int i) throw(char * exp)
? ? ? 實現定義的函數 ? ? ?void test(int i){ ?if(...){ throw "error..."}else{...} }
? ? ? 抓取異常 ? ?try { test(2)} catch( char* exp){}
? ? ? 需要注意: try{} catch{} catch{} ? 可以包含多個catch
C++ 模板
? ? ? ? ? 函數的模板(模板函數)定義:?
? ? ? ? ? ? ? ? ? ? ? ?template < typename/class ?形參>
? ? ? ? ? ? ? ? ? ? ? ?返回值類型 ?函數名(參數列表)
? ? ? ? ? ? ? ? ? ? ?template <class Type1,class Type2 > void _typefunc(Type1 a,Type2 b)
? ? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? ? return ?a+b;
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ?類的模板(模板類)定義:
? ? ? ? ? ? ? ? ? ? ? ? ? ? template <class A> class A
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public:T g(T a,T b);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? };
?