2014-04-28 102 views
0

我想用C++創建一個基本的抽象類,其中的子類都在一個單獨的文件中。我的抽象類看起來像C++中的抽象類和類組織

class Process_Base{ 
    public: 
     virtual void process() = 0; 
} 

像這樣的簡單實現應該完全包含在頭文件中嗎?如果這是我需要有一個.cpp文件與它關聯?

當我創建子類時,它們的頭文件應該是什麼樣的?我想.cpp文件的子類應該是這個樣子

#include "Process_Base.h" 

class Hello_Process : public Process_Base{ 
    void process(){ 
     printf("%s\n", "Hello, World"); 
    } 
} 

有人能證實我正確地處理這個,如果不給什麼我應該做一個簡單的例子。

UPDATE

我繼續實行,但現在我得到以下編譯器錯誤

g++ -c -Wall -g Process_Message.cpp 
Process_Message.cpp:4: error: expected class-name before ‘{’ token 

以下是抽象類的頭

// Abstract header .hpp file 
class Process_Base{ 
    public: 
     virtual void process() = 0; 
}; 

子類頭

// The subclass header .hpp file 
#include "Process_Base.hpp" 

class Process_Message : public Process_Base { 
public: 
    void process(); 
}; 

和實現

// Simple implementation .cpp file 
#include <stdio.h> 
#include <string.h> 

class Process_Message : Process_Base { 

public: 
    void process(){ 
     printf("%s", "Hello"); 
    } 
} 

我不明白爲什麼我收到錯誤,可有人請解釋。

+0

子類應該聲明在各自的頭文件的任何其他方法等等。如果基類是抽象的,則不需要cpp文件。目前看起來不錯! – Martin

+0

您的基類很可能需要虛擬析構函數。 – juanchopanza

+0

你應該在類的右括號後面放一個分號。就像那樣:class A {}; – tkhomas

回答

0

你錯過了;在Process_Base聲明的最後,當你包含這個文件時,編譯器就會執行。正確的是:

class Process_Base{ 
    public: 
     virtual void process() = 0; 
}; 
+0

我抄錯了類,';'是否在文件中,我已更正發佈 – JME

+0

然後仔細檢查您的包含,也嘗試移動派生類頭中的基類聲明,以檢查問題是否與包含,因爲錯誤說,Process_Base是未知的編譯器... –

0

爲什麼'Process_Base'在下面的代碼中有?你已經在頭文件中提到了繼承,對吧?

// Simple implementation .cpp file 
#include <stdio.h> 
#include <string.h> 

class Process_Message : Process_Base { 

public: 
    void process(){ 
     printf("%s", "Hello"); 
    } 
} 

另外不要忘記鍵入';'在後 '}'

0

類聲明的末尾您的正確的代碼應該是這樣的:

//Process_Message.h

#include "Process_Base.hpp" 

class Process_Message : public Process_Base { 
public: 
    void process(); 
}; 

//Process_Message.cpp

#include <stdio.h> 
#include <string.h> 
#include "Process_Message.h" 

     void Process_Message::process() 
     { 
      printf("%s", "Hello"); 
     } 
0

不要忘記聲明您的覆蓋爲virtual,否則他們將隱藏父方法而不是實現它們。

#include <iostream> 

class Process_Base 
{ 
public: 
    virtual ~Process_Base() {} 
    virtual void process() =0; 
}; 

class Process_Message : public Process_Base 
{ 
public: 
    virtual void process(); // <- virtual 
}; 

void Process_Message::process() 
{ 
    std::cout << "Hello"; 
} 

上述應彙編細