標籤:
物件導向(Object-Oriented):是一種按照人們認識客觀世界的思維方式,採用基於對象(實體)的概念建立抽象的模型,類比客觀世界分析、設計、實現軟體的方法。
類(Class):具有相同屬性、操作的抽象的集合。
類的成員:
類包括成員變數和成員函數,其具有3種屬性公有(public)、私人(private)和保護(protected)。
public:可以被該類的函數、子類的函數、友元函數訪問,也可以被該類的對象訪問。
private:只能被該類中的函數訪問,被友元函數訪問;不能被任何其他訪問,該類的對象也不能訪問。
protected:可以被該類的函數、子類的函數、友元函數訪問。不能被該類的對象訪問。
類的建立及初始化:
建立類時要對類進行聲明和定義。
建構函式(Constructors):是一種特殊的成員函數。主要用來在建立對象時初始化對象。建構函式唯一的文法限制是不能指定傳回型別。建構函式名與類名同名。建構函式包括預設建構函式、拷貝建構函式。
預設建構函式(Default Constructor):在類未提供顯式打的初始化值時,被用來建立對象的建構函式,預設建構函式無參數。若且唯若沒有定義任何建構函式時,編譯器才會提供預設的建構函式,為類定義了建構函式(有參數)後,則必須為它提供顯式預設的建構函式。給已有的建構函式的所有參數提供預設值。
1 #ifndef _Number_H_ 2 #define _Number_H_ 3 4 class Number 5 { 6 public: 7 Number(int a = 0, double b = 0.0); 8 //Number(int, double); 9 //Number();10 void ShowNumber();11 private:12 int Number_a;13 double Number_b;14 };15 16 #endifNumber.h
1 #include <stdio.h> 2 #include "Number.h" 3 4 Number::Number(int a, double b) 5 { 6 Number_a = a; 7 Number_b = b; 8 } 9 10 //Number::Number()11 //{12 // Number_a = 0;13 // Number_b = 0.0;14 //}15 16 void Number::ShowNumber()17 {18 printf("a = %-10d, b = %lf\n", Number_a, Number_b);19 }Number.cpp
1 #include "Number.h" 2 3 int main() 4 { 5 Number a(1, 1.1); 6 Number b; 7 a.ShowNumber(); 8 b.ShowNumber(); 9 return 0;10 }main.cpp
0 errors, 0 warningsa = 1 , b = 1.100000a = 0 , b = 0.000000
Result
通過重載來定義另一個建構函式。
1 #ifndef _Number_H_ 2 #define _Number_H_ 3 4 class Number 5 { 6 public: 7 //Number(int a = 0, double b = 0.0); 8 Number(int, double); 9 Number();10 void ShowNumber();11 private:12 int Number_a;13 double Number_b;14 };15 16 #endifNumber.h
1 #include <stdio.h> 2 #include "Number.h" 3 4 Number::Number(int a, double b) 5 { 6 Number_a = a; 7 Number_b = b; 8 } 9 10 Number::Number()11 {12 Number_a = 0;13 Number_b = 0.0;14 }15 16 void Number::ShowNumber()17 {18 printf("a = %-10d, b = %lf\n", Number_a, Number_b);19 }Number.cpp
1 #include "Number.h" 2 3 int main() 4 { 5 Number a(1, 1.1); 6 Number b; 7 a.ShowNumber(); 8 b.ShowNumber(); 9 return 0;10 }main.cpp
0 errors, 0 warnings2 a = 1 , b = 1.1000003 a = 0 , b = 0.000000
Result
拷貝建構函式(Copy Constructor):是一種特殊的建構函式,它由編譯器調用來完成一些基於同一類的其他對象的構建及初始化。
拷貝建構函式是由普通建構函式和賦值操作符共同實現的。
如果在類中沒有顯式的聲明一個拷貝建構函式,那麼,編譯器會自動產生一個來進行對象之間非static成員的位拷貝。這個隱含的拷貝建構函式簡單的關聯了所有的類成員。
在C++中,下面三種對象需要調用拷貝建構函式:
- 一個對象作為函數參數,以值傳遞的方式傳入函數體。
- 一個對象作為函數傳回值,以值傳遞的方式從函數返回。
- 一個對象用於給另一個對象進行初始化。
1 #ifndef _Number_H_ 2 #define _Number_H_ 3 4 class Number 5 { 6 public: 7 //Number(int a = 0, double b = 0.0); 8 Number(int, double); 9 Number();10 Number(const Number &);11 void ShowNumber();12 private:13 int Number_a;14 double Number_b;15 };16 17 #endifNumber.h
1 #include <stdio.h> 2 #include "Number.h" 3 4 Number::Number(int a, double b) 5 { 6 Number_a = a; 7 Number_b = b; 8 } 9 10 Number::Number()11 {12 Number_a = 0;13 Number_b = 0.0;14 }15 16 Number::Number(const Number & num)17 {18 Number_a = num.Number_a;19 Number_b = num.Number_b;20 }21 22 void Number::ShowNumber()23 {24 printf("a = %-10d, b = %lf\n", Number_a, Number_b);25 }Number.cpp
1 #include "Number.h" 2 3 int main() 4 { 5 Number a(1, 1.1); 6 Number b(a); 7 a.ShowNumber(); 8 b.ShowNumber(); 9 return 0;10 }main.cpp
0 errors, 0 warningsa = 1 , b = 1.100000a = 1 , b = 1.100000
Result
解構函式(Destructor):也是一種特殊的成員函數,它的作用與建構函式相反,當對象脫離其範圍時(例如對象所在的函數已經調用完畢),系統自動執行解構函式。
解構函式名也應與類名相同,只是在函數名前加一個取反符"~",以區別於建構函式。
類與類的初始化