2014-04-28 5 views
0

하위 클래스가 각각 별도의 파일에있는 기본 추상 클래스를 C++로 만들고 싶습니다. 내 추상 클래스는 다음과 유사합니다.C++의 추상 클래스 및 클래스 구성

이 간단한 구현을 전체적으로 헤더 파일에 포함해야합니까? 그렇다면 .cpp 파일을 연결해야합니다.

하위 클래스를 만들 때 헤더 파일을 어떻게 표시해야합니까? 나는 누군가가 내가 올바르게 접근하고 있는지 확인 할 수

#include "Process_Base.h" 

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

처럼 보일 것이다 서브 클래스에 대한 .cpp 파일을 생각하고, 그렇지 않으면 것은 내가 일을해야 무엇을 간단한 예제를 제공했다.

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

'}'후 클래스 선언의 끝에서 올바른 코드는 다음과 같아야합니다

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

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

//Process_Message.h

#include "Process_Base.hpp" 

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

//Process_Message.cpp을

재정의를 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"; 
} 

위는