略ios
變量的類型提供了多項信息:c++
- 變量佔據的內存
- 變量可存儲的信息
- 對變量可執行的操做
在c++中,可本身定義類型,以模擬要解決的問題。要聲明新問題,可建立一個類。類是新類型的定義。函數
c++類是一個模板,用於建立對象。定義類後,即可像使用其餘類型那樣使用根據它建立的對象。code
類是一系列捆綁在一塊兒的變量和函數,其中的變量能夠是任何其餘類型,也包括其餘類。對象
類中的變量稱爲成員變量,類中的函數稱爲成員函數或方法。blog
其實成員就是數據與操做,封裝以後就成爲了一個類。內存
聲明一個類,使用關鍵字class,好比:作用域
class Tricycle { public: unsigned int speed; unsigned int wheelSize; pedal(); break(); };
建立一個對象,可指定類名和變量名,好比:get
Tricycle wichita;
建立對象後,可以使用句點運算符(.)來訪問其成員函數和成員變量。編譯器
好比承接上面的:
Tricycle wichita; wichita.speed = 6; wichita.peadl();
訪問控制符public、protected、private就不說了,免得長篇大論。
對於聲明的每一個成員函數,都必須進行定義
成員函數的定義能夠在類中,也能夠在類外,在類外定義以類名打頭,而後是做用域解析運算符(::)和函數名再加函數體。
好比:
void Tricycle::pedal() { std::cout<<"Pedaling trike\n"; }
程序清單8.1Tricycle.cpp
#include <iostream> class Tricycle { public: int getSpeed(); void setSpeed(int speed); void pedal(); void brake(); private: int speed; }; int Tricycle::getSpeed() { return speed; } void Tricycle::setSpeed(int newSpeed) { if (newSpeed >= 0) { speed = newSpeed; } } void Tricycle::pedal() { setSpeed(speed + 1); std::cout << "\nPedaling;tricycle speed " << speed << " mph\n"; } void Tricycle::brake() { setSpeed(speed - 1); std::cout << "\nBraking;tricycle speed " << speed << " mph\n"; } int main() { Tricycle wichita; wichita.setSpeed(0); wichita.pedal(); wichita.pedal(); wichita.brake(); wichita.brake(); wichita.brake(); return 0; }
構造函數與析構函數:
類有一個特殊的成員函數——構造函數,每次實例化對象時都將調用它。構造函數的職責是建立一個有效的對象,這一般包括初始化成員數據。構造函數與類同名,且沒有返回值。構造函數能夠接受參數,也能夠不接受。
Tricycle類的構造函數:
Tricycle::Tricycle(int initialSpeed) { setSpeed(initialSpeed); }//使用了參數initialSpeed來設置成員變量speed的初始值
若是聲明瞭構造函數,也應聲明一個析構函數。構造函數建立並初始化對象,而析構函數執行清理工做並釋放分配給對象的內存。析構函數的名稱老是有齶化符號(~)和類名組成。析構函數不接收參數,也不返回值。
Tricycle類的析構函數:
Tricycle::~Tricycle() { std::cout<<"Destructed\n"; }
默認構造函數
假如您沒有聲明構造函數,編譯器將自動建立一個默認構造函數——沒有參數的構造函數,編譯器建立的這個默認構造函數不執行任何操做,就如同沒有參數且函數體爲空同樣。
- 默認構造函數是沒有參數的構造函數,能夠本身定義,也可讓編譯器提供
- 若是定義了構造函數,編譯器就不會建立默認構造函數。這種狀況下若是須要默認構造函數,須要本身定義。
一樣的,若是沒有定義析構函數,編譯器也將建立一個函數體爲空,不執行任何操做的析構函數。
程序清單8.2 NewTricycle.cpp
#include <iostream> class Tricycle { public: Tricycle(int initialAge); ~Tricycle(); int getSpeed(); void setSpeed(int speed); void pedal(); void brake(); private: int speed; }; Tricycle::Tricycle(int initialAge) { setSpeed(initialAge); } Tricycle::~Tricycle() { std::cout << "Destructed\n"; } int Tricycle::getSpeed() { return speed; } void Tricycle::setSpeed(int newSpeed) { if (newSpeed >= 0) { speed = newSpeed; } } void Tricycle::pedal() { setSpeed(speed + 1); std::cout << "\nPedaling;tricycle speed " << speed << " mph\n"; } void Tricycle::brake() { setSpeed(speed - 1); std::cout << "\nBraking;tricycle speed " << speed << " mph\n"; } int main() { Tricycle wichita(5); wichita.pedal(); wichita.pedal(); wichita.brake(); wichita.brake(); wichita.brake(); return 0; }