標籤:友元 hda sage 無法 ram Null 字元串 訊息 不同的 類型轉換
物件導向的特性
Abstraction(抽象)
Polymorphism(多態)
Inheritance(繼承)
Encapsulation(封裝)
類的定義
class Circle{
public:
double radius;
Circle(){
radius = 1;
}
Circle(double r){
radius = r;
}
double getArea(){
return radius*radius*3.14159;
}
};
類是一種資料類型
對象指標:用指標訪問對象成員
Circle circle1;
Circle *pCircle = &circle1;
兩者效果相同:
(*pCircle).radius
pCircle->radius
在堆上建立對象
在函數中聲明的對象都一般在棧上建立,函數返回後對象就被銷毀。為了保留對象,可以用new運算子在堆上建立它。
ClassName *pObject = new ClassName();
delect pObject; //當程式結束時動態對象會被系統銷毀,程式員也可以手動顯示銷毀
建立string對象
用無參建構函式創造一個Null 字元串
string newString;
用一個字串常量建立string對象
string message("Aloha World");
用字串數組建立string對象
char charArray[] = {‘H‘,‘e‘,‘l‘,‘l‘,‘o‘,‘\0‘};
string message1(charArray)
內建指標this:指向當前函數的調用對象
建構函式的初始化
當類的資料域是一個物件類型,而且當這個對象的類本身沒有無參建構函式時,須通過初始化列表來初始化對象。
靜態成員
可以通過類或者對象調用靜態函數,只能通過對象調用非靜態函數。
當變數或者函數不依賴於類的執行個體時,可以將此變數/函數定義為靜態。
解構函式
友元:通過friend聲明友元函數或者友元類,從而可以通過友元訪問private成員
拷貝建構函式(copy constructor)
ClassName(ClassName&)
喚起拷貝建構函式:
ClassName obj1(obj2);
或 ClassName obj1 = obj2; //只能在初始化時拷貝
淺拷貝:拷貝指標,而非指標所指向的內容
深拷貝:擷取原指標的內容,建立新指標,拷貝原指標指向的內容到新指標裡
定製深拷貝建構函式:
Person::Person(Person& person){
id = person.id;
Date* p = person.getBirthDate();
birthDate = new Date(*p);
}
Vector類
繼承
DerivedClass(parameterList) : BaseClass() { }
DerivedClass(parameterList) : BaseClass(argumentList) { }
多態:不同的對象對相同的訊息有不同的相應
聯編:確定具有多態的語句調用哪個函數的過程
-> 靜態聯編:在程式編譯時間確定調用哪個函數(函數重載)
-> 動態聯編:在程式運行時才確定調用哪個函數(運行時多態)
虛函數(virtual)
如何?函數的動態聯編:
1)基類定義同名虛函數
2)訪問對象的成員函數時,要用指向對象的指標或者對象引用
基類與衍生類別中有同名函數時:
1,通過衍生類別對象訪問同名函數 -> 靜態聯編
2,通過基類對象的指標訪問同名函數 -> 靜態聯編
3,通過基類對象的指標訪問同名虛函數 ->動態聯編
抽象類別:完全無法執行個體化的類
純虛函數:
在抽象類別GemoetricObject裡定義函數virtual double getArea() = 0;
動態類型轉換
C++:物件導向