您現在的位置是:首頁 > 手機遊戲首頁手機遊戲

C++|類與物件的簡單解釋及一個比較通俗易懂的例項化說明

簡介} destructor for the objectTricycle::~Tricycle() 特殊成員函式,稱解構函式,用於釋放分配給物件的記憶體{ do nothing} get the trike‘s speedint

物件是類的什麼

根據基本資料型別宣告的變數可以告訴編譯器以下資訊:

I 需要的記憶體空間;

II 取值的範圍;

III 可以執行的操作(如可以使用什麼運算子,使用運算子的規則及達到的效果);

在C++中,可自己定義型別,以模擬要解決的問題。要宣告新型別,可建立一個類,類是新型別的定義,這個新的型別也要能夠告訴編譯器一些相關的資訊,如可以操作的資料,需要的記憶體空間,對定義的資料可以進行的操作,建立時的初始化賦值,物件刪除後記憶體空間的釋放、資料訪問的控制等。然後可以根據新型別定義新型別的變數(一般叫例項)。這樣的一個過程類似於根據基本資料型別宣告變數。

C++類是一個模板,用於建立物件(就如同用基本資料型別定義變數)。定義類後,便可像使用其他型別那樣使用根據它建立的物件。

類是一系列捆綁在一起的變數和函式,其中的變數可以是任何其他型別,包括其他類。

變數構成了資料,而函式使用這些資料來執行任務。將變更和函式捆綁在一起稱為封裝。

類中的變數稱為成員變數,或叫資料成員、例項變數,它們是類的組成部分。

類中的函式使用和修改成員變數,它們被稱為類的成員函式或方法。與成員變數一樣,成員函式也是類的組成部分,它們決定了類的物件能做什麼。

以下內容請結合後面的例項去理解:

1 宣告類

宣告類使用關鍵字class,並在後面加上有關成員變數和成員函式的資訊。類定義放在一組大括號{}內。

宣告並不直接給成員變數分配記憶體,這只是告訴編譯器,這個宣告的類是什麼樣的:包含哪些資料以及能做什麼?編譯器根據類宣告的成員變數,就知道這個類的物件所需要的記憶體空間。

2 實現成員函式

對於宣告的每個成員函式,都必須進行定義。

成員函式的定義以類名打頭,然後是作用域解析運算子(::)和函式名。

類函式和常規函式類似,也可以接受引數並返回值。

一般包括有四個特殊的成員函式:訪問、設定私有成員變數值的存取器、建構函式、解構函式;

用來設定或獲取私有成員變數值的函式稱為存取器(accessor);要使用這些私有成員變數,其他類必須呼叫存取器,而不能直接使用。存取器讓您能夠將資料的儲存方式和使用方式分開。這樣,如果修改了資料的儲存方式,也無須重寫使用資料的函式。

建構函式用於例項化物件時呼叫它來初始化資料成員,建構函式名與類名相同,且沒有返回值,引數可有可無;

解構函式用於釋放分配給物件的記憶體,解構函式的名稱總是由顎化符號(~)和類名組成,無引數、無返回值、無語句;

3 建立物件

要根據類建立物件,可指定類名和變數名,類似根據基本資料型別建立變數。建立物件被稱為例項化,物件是類的例項。物件可以建立在棧中,也可以使用指標建立在堆中。

4 訪問物件成員

建立在棧中的物件,可使用句點運算子(。)來訪問其成員函式和成員變數。

要訪問堆中的物件,必須對指標解除引用,並對指標指向的物件使用句點運算子。也可以使用一種簡捷的間接訪問運算子,指向運算子(points-to operator,->),它由短劃線(-)和大於號(>)組成,C++將它們視為一個符號。

例項程式碼:

C++|類與物件的簡單解釋及一個比較通俗易懂的例項化說明

C++|類與物件的簡單解釋及一個比較通俗易懂的例項化說明

C++|類與物件的簡單解釋及一個比較通俗易懂的例項化說明

執行結果:

Pedaling; tricycle speed 6 mph

Pedaling; tricycle speed 7 mph

Braking; tricycle speed 6 mph

Braking; tricycle speed 5 mph

Braking; tricycle speed 4 mph

Pedaling; tricycle speed 16 mph

Pedaling; tricycle speed 17 mph

堆中的物件在函式返回後仍存在。另外,這種物件還是動態的,將物件儲存在堆中的功能讓您能夠在執行階段決定需要多少個物件,而不必預告宣告。在堆中宣告的物件可用來建立複雜的資料結構。

附程式碼:

#include

class Tricycle //宣告類

{

private:

int speed; //資料成員,成員函式或方法的操作物件

public:

Tricycle(int initialAge);

~Tricycle();

//↓ 兩個特殊的成員變數,稱為存取器(accessor),用於獲取和設定私有成員變數值

int getSpeed(); //成員函式,對資料成員的操作:這裡是獲取私有成員變數值

void setSpeed(int speed); //成員函式,對資料成員的操作:這裡是設定私有成員變數值

void pedal(); //成員函式,對資料成員的操作;

void brake(); //成員函式,對資料成員的操作;

};

// constructor for the object

Tricycle::Tricycle(int initialSpeed) //特殊成員函式,稱建構函式,用於初始化物件的成員資料

{

setSpeed(initialSpeed);

}

// destructor for the object

Tricycle::~Tricycle() //特殊成員函式,稱解構函式,用於釋放分配給物件的記憶體

{

// do nothing

}

// get the trike‘s speed

int Tricycle::getSpeed()

{

return speed;

}

// set the trike’s speed

void Tricycle::setSpeed(int newSpeed)

{

if (newSpeed >= 0)

{

//speed = newSpeed;

this->speed = newSpeed; //也可以顯式使用this指標

}

}

// pedal the trike

void Tricycle::pedal()

{

setSpeed(speed + 1);

std::cout << “\nPedaling; tricycle speed ” << getSpeed() << “ mph\n”;

}

// apply the brake on the trike

void Tricycle::brake()

{

setSpeed(speed - 1);

std::cout << “\nBraking; tricycle speed ” << getSpeed() << “ mph\n”;

}

// create a trike and ride it

int main()

{

Tricycle wichita(5); //在棧中建立(例項化)一個物件

wichita。pedal();

wichita。pedal();

wichita。brake();

wichita。brake();

wichita。brake();

Tricycle *pWichita = new Tricycle(15); //在堆中建立(例項化)一個物件

(*pWichita)。pedal(); //透過解引用和句點運算子訪問物件成員

pWichita->pedal(); //使用指向運算子(->)訪問物件成員

delete pWichita;

system(“pause”);

return 0;

}

-End-

Top