我正在学习 c++ 继承,我来自 Java。为了训练,我制作了一个小型 java 示例并尝试将其转换为 c++,但我的 c++ 实现有很多问题。
这是我的接口 IShape.java。它代表了 Shape 的抽象。
public interface IShape {
public void draw();
}
这是我实现Shape的Triangle.java。
public class Triangle implements IShape{
@Override
public void draw() {
//draw code
}
}
现在是 Main.java:
public class Main {
public static void main(String[] args) {
IShape someShape = new Triangle();
someShape.draw();
}
}
在java中一切都很好,但我的c++版本甚至没有编译:S 这是我的IShape.h c++文件。它应该类似于 IShape.java 接口。
#ifndef ISHAPE_H_
#define ISHAPE_H_
class IShape{
public:
virtual void draw() = 0;
//must have this because of compiler
virtual ~IShape();
private:
//an awesome thing in c++ is that I can also define private methods for my children to implement!
virtual int compute_point() = 0;
};
#endif
现在我的 Triangle.cpp 文件:
#include "IShape.h"
class Triangle: public IShape {
protected:
int max_size;
public:
Triangle(){
max_size = 255;//This triangle has a limited max size!
}
void draw() {
//implementation code here
}
private:
int compute_point() {
//implementation code here
}
};
现在完成,我的 C++ 主要:
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include "IShape.h"
#include "Triangle.cpp"
using namespace std;
int main( int argc, char *argv[]){
IShape myShape = Triangle();
myShape.draw();
return EXIT_SUCCESS;
}
我的 C++ 主程序中有什么错误。因为我有几个问题,我会尝试列举它们:
- 它告诉我“mySHApe”是抽象的,而不是因为我在三角形类中实现了它!
- 即使我修复了第一个错误,我也无法调用“myShape.draw()”
- 我的朋友说我永远不应该包含 cpp 文件。但是如果我不包括三角形,我的 Main.cpp 怎么知道它存在?
- 有没有更好的方法在 C++ 中移植这个例子?还是我太“java-ed”了?
我已经阅读了几个关于 c++ 的链接和教程,每个链接和教程都以不同的方式教给我一些东西,因此我最终得到了很多定义并且有点困惑。我也搜索了 StackOverflow,但我发现的帖子对我没有帮助,它们通常指的是更复杂的问题。
我做错了什么,您可以提供哪些提示来改进我的代码风格?另外,对于文字墙感到抱歉,我正在努力解释自己,而不是被否决。