我想在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");
}
}
我不明白为什么我会收到错误,有人可以解释一下。
答案 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";
}
以上应该编译好