1.基本概念
物件導向程式設計是利用對象來進行程式設計。一個對象表示現實世界中一個獨一無二的實體。例如,一名學生、一張桌子、一個圓等都可以看作對象。一個對象具有唯一的身份、狀態和行為。一個對象的狀態用資料域以及它們的當前值來表示。一個對象的行為由一組函數定義,對一個對象調用一個函數就是請求對象執行一個任務。
相同類型的對象用一個通用的類來定義。一個類是一個模板或者一個藍圖,它定義了對象具有什麼樣的資料和函數。一個對象就是類的一個執行個體,我們可以建立一個類的多個對象。建立一個執行個體稱為執行個體化。新建立的對象儲存在一塊記憶體地區中,當對象建立後,我們可以使用點運算子( . ),也就是所謂的對象成員訪問運算子,來訪問對象的資料,調用對象的函數。下面是一個例子:
class Circle{public:double radius;Circle();{radius=1;}Circle(double newRadius){radius=newRadius;}double getArea(){return radius*radius*3.14159;}};int main(){Circle circle1;Circle circle2(5.0);cout<<”The area of the circle of radius”<<circle1.radius<<”is”<<circle1.getArea()<<endl;cout<<”The area of the circle of radius”<<circle2.radius<<”is”<<circle2.getArea()<<endl;circle2.radius=100;cout<<”The area of the circle of radius”<<circle2.radius<<”is”<<circle2.getArea()<<endl;return 0;}
程式輸出的結果如下:
The area of the circle of radius 1 is 3.14159
The area of the circle of radius 5 is 78.5397
The area of the circle of radius 100 is 31415.9
注意點:
1)在類定義末尾一定要有一個分號(;),union和struct也是如此。
2)一個類成員,資料域是不能在聲明時進行初始化的,可以在建構函式中為其賦值。 2.聲明和實現分離
C++允許將類的聲明和實現分離。類聲明描述了類的約定,而類實現則實現了這一約定。類聲明簡單地列出所有資料域、建構函式原型和函數原型,類實現給出建構函式和成員函數的實現,兩者置於兩個分離的檔案中。兩個檔案應該使用相同的名字,但具有不同的副檔名。類聲明檔案的副檔名為.h,類實現副檔名為.cpp。現將上面的例子進行聲明和實現的分離。
程式清單 Circle.h
class Circle{public:double radius;Circle();Circle(double newRadius);double getArea();};
程式清單Circle.cpp
#include “Circle.h”Circle::Circle(){radius=1;}Circle::Circle(double newRadius){radius=newRadius;}double Circle::getArea(){return radius*radius*3.14159;}
注意點:
1)每個建構函式和函數之前的Circle::是必須的,它告知編譯器這些函數是定義於Circle類中的。在C++中,符號::稱為二元範圍解析運算子。
2)如果一個函數是在類聲明內實現的,那麼它就自動地成為一個內嵌函式。還有另外一種方法將類成員函式宣告為內聯的,在類實現檔案中用inline指明成員函數是內嵌函式。 3.對象指標與對象數組
1)對象指標
對象名一旦聲明後,就無法修改。但是,我們可以建立對象指標,只要需要,任何時候都可以將對象地址賦予指標。例如:
Circle circle1;
Circle *pCircle=&circle1;
通過指標訪問對象成員,有以下兩種辦法。第一種,對指標解引用,然後使用點運算子( . )訪問對象成員。第二種,C++提供了一種簡寫的成員選擇運算子,箭頭運算子(->)。下面是分別用以上兩種方法實現指標訪問對象成員的例子:
cout<<”The radius is “<<(*pCircle).radius<<endl;
cout<<”The area is”<<pCircle->getArea()<<endl;
2)對象數組
我們可以建立元素為基礎資料型別 (Elementary Data Type)的數組,同樣,我們也可以建立對象數組。例如:
Circle circleArray[10];
這條語句會調用無實參建構函式來初始化數組中的元素。
注意:在聲明對象指標時,只是聲明了一個指向對象的指標,並不會調用建構函式;而在聲明對象數組時,會先調用建構函式來初始化對象元素。 4.變數範圍
在類中,只能為一個資料域聲明一個成員變數,但一個變數名可用在多個不同的函數中聲明多個局部變數。局部變數在函數內聲明,只能在函數內局部使用。如果(成員函數中)一個局部變數與一個資料域具有相同的名字,資料域將被屏蔽,因為局部變數的優先順序更高。