您現在的位置是:首頁 > 手機遊戲首頁手機遊戲
C++|類與物件的簡單解釋及一個比較通俗易懂的例項化說明
- 2022-03-24
物件是類的什麼
根據基本資料型別宣告的變數可以告訴編譯器以下資訊:
I 需要的記憶體空間;
II 取值的範圍;
III 可以執行的操作(如可以使用什麼運算子,使用運算子的規則及達到的效果);
在C++中,可自己定義型別,以模擬要解決的問題。要宣告新型別,可建立一個類,類是新型別的定義,這個新的型別也要能夠告訴編譯器一些相關的資訊,如可以操作的資料,需要的記憶體空間,對定義的資料可以進行的操作,建立時的初始化賦值,物件刪除後記憶體空間的釋放、資料訪問的控制等。然後可以根據新型別定義新型別的變數(一般叫例項)。這樣的一個過程類似於根據基本資料型別宣告變數。
C++類是一個模板,用於建立物件(就如同用基本資料型別定義變數)。定義類後,便可像使用其他型別那樣使用根據它建立的物件。
類是一系列捆綁在一起的變數和函式,其中的變數可以是任何其他型別,包括其他類。
變數構成了資料,而函式使用這些資料來執行任務。將變更和函式捆綁在一起稱為封裝。
類中的變數稱為成員變數,或叫資料成員、例項變數,它們是類的組成部分。
類中的函式使用和修改成員變數,它們被稱為類的成員函式或方法。與成員變數一樣,成員函式也是類的組成部分,它們決定了類的物件能做什麼。
以下內容請結合後面的例項去理解:
1 宣告類
宣告類使用關鍵字class,並在後面加上有關成員變數和成員函式的資訊。類定義放在一組大括號{}內。
宣告並不直接給成員變數分配記憶體,這只是告訴編譯器,這個宣告的類是什麼樣的:包含哪些資料以及能做什麼?編譯器根據類宣告的成員變數,就知道這個類的物件所需要的記憶體空間。
2 實現成員函式
對於宣告的每個成員函式,都必須進行定義。
成員函式的定義以類名打頭,然後是作用域解析運算子(::)和函式名。
類函式和常規函式類似,也可以接受引數並返回值。
一般包括有四個特殊的成員函式:訪問、設定私有成員變數值的存取器、建構函式、解構函式;
用來設定或獲取私有成員變數值的函式稱為存取器(accessor);要使用這些私有成員變數,其他類必須呼叫存取器,而不能直接使用。存取器讓您能夠將資料的儲存方式和使用方式分開。這樣,如果修改了資料的儲存方式,也無須重寫使用資料的函式。
建構函式用於例項化物件時呼叫它來初始化資料成員,建構函式名與類名相同,且沒有返回值,引數可有可無;
解構函式用於釋放分配給物件的記憶體,解構函式的名稱總是由顎化符號(~)和類名組成,無引數、無返回值、無語句;
3 建立物件
要根據類建立物件,可指定類名和變數名,類似根據基本資料型別建立變數。建立物件被稱為例項化,物件是類的例項。物件可以建立在棧中,也可以使用指標建立在堆中。
4 訪問物件成員
建立在棧中的物件,可使用句點運算子(。)來訪問其成員函式和成員變數。
要訪問堆中的物件,必須對指標解除引用,並對指標指向的物件使用句點運算子。也可以使用一種簡捷的間接訪問運算子,指向運算子(points-to operator,->),它由短劃線(-)和大於號(>)組成,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-