C++學習之旅: 第10章
阿新 • • 發佈:2019-01-06
定義類,類規範由兩部分類宣告和類定義兩部分組成。一般情況下,類的宣告定義放在標頭檔案中,類的實現(類方法的程式碼)是放在原始碼檔案中。
-
類宣告:已資料成員的方式描述資料部分,已成員函式(即方法)描述公有介面
-
類定義:描述如何實現成員函式
基礎知識
- 成員函式可在在類宣告中就地定義(此時該函式就成為行內函數),也可以使用原型宣告。行內函數也可以在類外部實現,行內函數比較特殊,需要在每個使用到它的檔案都對其定義,所以為了確保內聯定義多檔案程式的所有程式有效,所以行內函數要放在標頭檔案中。類的行內函數定義如下:
inline type className::method(args) {
//實現
}
- 關鍵字
private
、public
和protected
是新的,描述了類成員的訪問控制。如果不宣告的話,預設為private
。通常,成員資料放在private
中,類的成員函式放在public
中。 - 實現類成員方法,需要使用類作用域運算子
::
來標誌標誌函式所屬的類,且類方法可以訪問private
元件。類函式實現如下:
type className::method(args) {
//實現
}
- 每一個物件都有自己的儲存空間,用於儲存內部變數和類成員,但同一個類建立的所有物件都共享同一個方法。
- 類的構造方法。類都有一個預設的構造方法,構造方法的名字和類名一樣,且沒有返回值。需要注意以下幾點:
- 類的建構函式的引數名不能和類成員一樣。
- 不能使用使用物件呼叫建構函式。
- 如果類定義了建構函式,但又想使用預設的建構函式,則必須為類提供預設建構函式
- 建立物件會呼叫建構函式,呼叫建構函式方式有三種。
- 方式一,顯式使用:
Student student = Student("hbx", 24);
- 方式二,隱式使用:
Student student("hbx", 24);
- 方式三,New構造:
Student student = new Student("hbx", 24);
- 方式一,顯式使用:
- 解構函式。當物件過期時,程式將自動呼叫解構函式,我們可以在解構函式中釋放資源。例如,我們在建構函式中使用
New
操作符分配了記憶體,則應該在解構函式中使用delete
操作符釋放資源。解構函式實現如下:
~className{
//釋放資源等操作
}
- 當物件或物件指標宣告為
const
時,呼叫的函式也需要宣告為const
, 否則呼叫失敗。這樣做是為了避免呼叫函式時,函式會修改常量物件。只要類方法不修改呼叫物件,就應該將其宣告為const
。const
函式宣告方式如下:
type className::method(args) const
this
指標。this
指標用於指向正在呼叫方法的物件。
例項
如Student類的標頭檔案Student.h:
//Student.h
#ifndef STUDENT_H
#define STUDENT_H
#include "string"
class Student{
private:
std::string mName;
int mAge;
public:
Student(Student &);
Student(std::string name="hbx", int age=24);
int getAge(){
return mAge;
};
std::string getName(){
return mName;
}
};
#endif
Student類的實現檔案Student.cpp:
//Student.cpp
#include "Student.h"
#include "string"
Student::Student(std::string name, int age) : mName(name), mAge(age) {}
Student::Student(Student & student){
mName = student.mName;
mAge = student.mAge;
}