iT邦幫忙

1

【c++類別class】c++的class分成三個檔案來寫

c++

哈囉,大家好,
此文僅供自己學習備忘之用,
以下是一個c++使用class的小例子:

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

class ElectricPot
{
private:
    string color;
public:
    ElectricPot(string c):color(c){};
    void cook();
};

void ElectricPot::cook()
{
    cout << "我是 "<< color <<" 顏色的電鍋,我正在煮飯"<<endl;
}

int main()
{
    ElectricPot myPot("yellow");
    myPot.cook();
    return 0;
}

這支程式短,把所有程式碼都寫在同一個class裡倒也沒什麼問題,
但若是開發大型程式,
可能便會將class的定義與實作分不同的class來寫,
使主程式的邏輯乾淨好讀

標頭檔electricPot.h

首先先宣告一個標頭檔electricPot.h
用意是寫class的定義,
至於實作可以寫另寫一個class來做

#ifndef ELECTRICPOT_H_INCLUDED
#define ELECTRICPOT_H_INCLUDED

#include <string>
using namespace std;

class ElectricPot
{
private:
    string color;
public:
    ElectricPot(string c):color(c){};
    void cook();
};

#endif // ELECTRICPOT_H_INCLUDED

electricPot.cpp

實作這個class裡面的內容則另外寫一個檔案electricPot.cpp:

#include <string>
#include "electricPot.h"
using namespace std;

//「::」稱之為類別範圍解析(Class scope resolution)運算子,在實作類別方法時,在::之前指明您要實作的是哪一個類別的方法。

void ElectricPot::cook()
{
    cout << "我是 "<< color <<" 顏色的電鍋,我正在煮飯"<<endl;
}

main.cpp

main.cpp裡面需要使用class,
需要引用檔案"electricPot.cpp"

#include <iostream>
#include <string>
#include "electricPot.cpp"
using namespace std;

int main()
{
    ElectricPot myPot("yellow");
    myPot.cook();
    return 0;
}

我發現寫#include "electricPot.h"的話,
會出現undefined reference to ElectricPot::cook()的錯誤,
可能是因為cook這個函數是在electricPot.cpp做的而非在electricPot.h裡做的,
不過倒也奇怪,我查有些教學都直接引用.h檔,例如[C++] class基礎範例 分3個檔的範例,
但我直接這樣寫會錯,
不確定是因為編譯器還是IDE的關係
(這邊我用codeBlock創建c++ project寫的程式)


尚未有邦友留言

立即登入留言