1. 程式人生 > >C++學習之旅: 第10章

C++學習之旅: 第10章

定義類,類規範由兩部分類宣告和類定義兩部分組成。一般情況下,類的宣告定義放在標頭檔案中,類的實現(類方法的程式碼)是放在原始碼檔案中。

  • 類宣告:已資料成員的方式描述資料部分,已成員函式(即方法)描述公有介面

  • 類定義:描述如何實現成員函式

基礎知識

  1. 成員函式可在在類宣告中就地定義(此時該函式就成為行內函數),也可以使用原型宣告。行內函數也可以在類外部實現,行內函數比較特殊,需要在每個使用到它的檔案都對其定義,所以為了確保內聯定義多檔案程式的所有程式有效,所以行內函數要放在標頭檔案中。類的行內函數定義如下:
inline
type className::method(args) { //實現 }
  1. 關鍵字privatepublicprotected是新的,描述了類成員的訪問控制。如果不宣告的話,預設為private。通常,成員資料放在private中,類的成員函式放在public中。
  2. 實現類成員方法,需要使用類作用域運算子::來標誌標誌函式所屬的類,且類方法可以訪問private元件。類函式實現如下:
type className::method(args) {
    //實現
}
  1. 每一個物件都有自己的儲存空間,用於儲存內部變數和類成員,但同一個類建立的所有物件都共享同一個方法。
  2. 類的構造方法。類都有一個預設的構造方法,構造方法的名字和類名一樣,且沒有返回值。需要注意以下幾點:
    • 類的建構函式的引數名不能和類成員一樣。
    • 不能使用使用物件呼叫建構函式。
    • 如果類定義了建構函式,但又想使用預設的建構函式,則必須為類提供預設建構函式
  3. 建立物件會呼叫建構函式,呼叫建構函式方式有三種。
    • 方式一,顯式使用:Student student = Student("hbx", 24);
    • 方式二,隱式使用:Student student("hbx", 24);
    • 方式三,New構造:Student student = new Student("hbx", 24);
  4. 解構函式。當物件過期時,程式將自動呼叫解構函式,我們可以在解構函式中釋放資源。例如,我們在建構函式中使用New操作符分配了記憶體,則應該在解構函式中使用delete操作符釋放資源。解構函式實現如下:
    ~className{
        //釋放資源等操作
    }
  1. 當物件或物件指標宣告為const時,呼叫的函式也需要宣告為const, 否則呼叫失敗。這樣做是為了避免呼叫函式時,函式會修改常量物件。只要類方法不修改呼叫物件,就應該將其宣告為constconst函式宣告方式如下:
   type className::method(args) const
  1. 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;
}