iT邦幫忙

1

【c/c++學習筆記】class的建構子(constructor)簡介

今天來以另一個例子學習c++語法的類別,
比方說,「人(Person)」可以是一個類別,
「人(Person)」這個類別可能有「姓名(name)」、「年齡(age)」等屬性,
有「自我介紹(introduction)」這個函數,
我們定義如下:

class Person{
private:
    string name;
    int age;
public:
    void introduction();
};

我們可能會想把「姓名(name)」、「年齡(age)」等屬性定義成private,
因為也許我們希望一旦這些屬性初始化之後,
就不能在外部隨意修改

因此,在main()函數中直接給Person的物件的name屬性賦值會出錯

Person p1;
p1.name = "Mark"; // 錯誤: name是私有屬性,無法存取

這時就可以用到constructor了。

constructor用法

constructor的名稱一定與類別的名稱相同,
與一般函數不同的是它不需要寫回傳值,
用來初始化一個類別的物件,例如:

class Person{
private:
    string name;
    int age;
public:
    Person(string name, int age);
    void introduction();
};

我們在public的標籤下,增加一個constructor叫做Person(string name, int age);
我們可以實作它:

Person::Person(string name, int age){
    this->name = name;
    this->age = age;
}

這時,你就可以在主程式裡用這個constructor來給Person初始值了

Person p1("Mark", 20); //創建一個Person物件p1,名字是Mark,年齡20

我們可以定義Person的introduction()函數,
方便在主程式中測試印出資訊(由於name, age都定義成private屬性,無法直接印出)

void Person::introduction(){
    cout<< "My name is " <<name << ", I am " << age << " year old.\n";
}

完整測試程式碼

#include <iostream>
#include <string>
using namespace std;

class Person{
private:
    string name;
    int age;
public:
    Person(string name, int age);
    void introduction();
};

Person::Person(string name, int age){
    this->name = name;
    this->age = age;
}

void Person::introduction(){
    cout<< "My name is " <<name << ", I am " << age << " year old.\n";
}

int main()
{
    Person p1("Mark", 20);
    p1.introduction();
    return 0;
}

結果為My name is Mark, I am 20 year old.


尚未有邦友留言

立即登入留言