私は 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 を使いすぎている」のでしょうか。
私は c++ に関するいくつかのリンクとチュートリアルを読みましたが、それぞれが異なる方法で何かを教えてくれるため、多くの定義があり、少し混乱してしまいます。StackOverflow も検索しましたが、見つけた投稿は役に立ちませんでした。通常、より複雑な質問に言及しています。
コード スタイルを改善するために、どのようなヒントを提供できますか? また、テキストの壁で申し訳ありませんが、私は自分自身を説明し、反対票を投じないように努めています.