class 類名{
存取範圍說明符:
成員變數1
成員變數2
成員函數宣告1
成員函數宣告2
存取範圍說明符:
更多成員變數
更多成員函數宣告
...
};
;
結束。
返回值型別 類名:函數名()
{
函數體
}
類名 物件名;
此處,“物件名”的命名規則和普通變數相同。物件也可以看作“類變數”。#include <iostream> using namespace std; class CRectangle { public: int w, h; //成員變數,寬和高 void init( int w_,int h_ ); //成員函數,設定寬和高 int area(); //成員函數, 求面積 int perimeter(); //成員函數,求周長 }; //必須有分號 void CRectangle::init( int w_,int h_ ) { w = w_; h = h_; } int CRectangle::area() { return w * h; } int CRectangle::perimeter() { return 2 * ( w + h); } int main( ) { int w,h; CRectangle r; //r是一個物件 cin >> w >> h; r.init( w,h); cout << "It's area is " << r.area() << endl; cout << "It's perimeter is " << r. perimeter(); cout << sizeof(CRectangle) << endl; return 0; }第 3~10 行定義了一個類,類的名字就是 CRectangle。在 C++ 中,每個類的名字都是一種型別,可以像 int、double 等基本型別那樣來使用。因此,CRectangle 也是一種程式設計師自己定義的型別的名字。
物件名.成員名
的方式。例如:
CRectangle r1, r2; r1.w = 5; r2.init(5, 4);
r1.w = 5;
這條語句直接對 r1 物件的 w 成員變數進行賦值。它不會影響 r2。物件名.成員函數名
的方式可以呼叫成員函數,並且被呼叫成員函數是作用在該物件上的。例如,r2.init(5, 4);
這條語句就呼叫了 CRectangle 類的 init 成員函數,該成員函數執行時是作用在 r2 這個物件上的。r2.init(5, 4);
這條語句在 init 函數執行期間存取的 w 和 h 就是屬於 r2 這個物件的。執行r2.init(5, 4);
不會影響 r1。物件名.成員名
方法,還可以用指標->成員名
的方式來存取物件的成員。例如:
CRectangle rl, r2; CRectangle* p1 = &r1; CRectangle* p2 = &r2; p1 -> w = 5; //此處的 w 屬於 p1 指向的物件 p2 -> init(5, 4); //init函數作用在 p2 指向的物件上
參照名.成員名
的方式存取物件的成員。例如:
CRectangle r2; CRectangle & rr = r2; rr.w = 5; rr. init(5, 4); //rr的值改變,r2的值也改變
init(2, 4);
這條語句是不能編譯通過的。因為編譯器不清楚這個 init 函數是作用在哪個物件上面的,進入 init 函數以後,其中存取的 w 和 h 的記憶體地址在哪裡無從知曉,因而也就無法編譯了。struct CRectangle{ public: int w, h; //成員變數,寬度和高度 void init(int w_, int h_); //成員函數,設定寬度和高度 };沒有成員函數的 struct 還是稱作“結構”,結構變數不是物件;有成員函數的 struct 就是類。