C ++中的抽象类和类组织

时间:2014-04-28 08:28:27

标签: c++ abstract-class

我想在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");
    }
}

有人可以验证我是否正确接近这个,如果没有给出一个我应该做的简单示例。

更新

我继续执行但我现在收到以下编译器错误

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");
    }
}

我不明白为什么我会收到错误,有人可以解释一下。

4 个答案:

答案 0 :(得分:0)

你错过了;在Process_Base声明结束时,当你包含文件时,编译器就会疯狂。正确的是:

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

答案 1 :(得分:0)

为什么这个&#39; Process_Base&#39;下面的代码是否有?你已经在头文件中提到了继承,对吗?

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

class Process_Message : Process_Base {

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

也不要忘记输入&#39;;&#39;在&#39;}&#39;

之后的课堂声明结束时

答案 2 :(得分: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");
      }

答案 3 :(得分: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";
}

以上应该编译好