最近、C ++の継承とポリモーフィズムに取り組んでみましたが、意味をなさない問題がいくつかあります。別々のファイルに2つのヘッダーがあり、実装を含むcppファイルがあります。私のコードの簡単な要約は次のとおりです。
#ifndef MANDEL_H_
#define MANDEL_H_
class Mandel{
public:
virtual void compute("various arguments") = 0;
//dummy destructor, I must have one or compile is sad and I dunno why
virtual ~Mandel();
private:
virtual int compute_point("various arguments") = 0;
};
#endif
これは「Mandel.h」と呼ばれる私の「祖父」ヘッダーです。次に、「父」ヘッダーに移動します。この次のヘッダーは、Mandelの白と黒の実装に固有で、「Black_White_Mandel.h」と呼ばれるいくつかの変数を指定します。
#ifndef BLACK_WHITE_MANDEL_H_
#define BLACK_WHITE_MANDEL_H_
#include "Mandel.h"
class Black_White_Mandel: public Mandel {
protected:
int max_iterations; //a specific variable of this Black_White Version
};
#endif
そして、White_Black_Mandel_Imp1.cppという別のファイルで、Black_White_Mandelヘッダーの実装に従います。
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include "Mandel.h"
#include "Black_White_Mandel.h"
using namespace std;
//constructor
Black_White_Mandel::Black_White_Mandel(){
max_iterations = 255;
}
//destructor
Black_White_Mandel::~Black_White_Mandel(){}
int Black_White_Mandel::compute_point("various arguments") {
//code and stuff
return 0;
}
void Black_White_Mandel::compute("various arguments") {
//code and stuff
}
したがって、Mandel.hには2つの関数があり、それらは仮想で「= 0」であるため、実装する必要があります。White_Black_Mandel_Imp1.cppで、これらの関数を実装すると、コンパイラーはおかしくなります。関数はWhite_Black_Mandel.hで定義されておらず、それは真実ですが、Mandel.hで定義されていると書かれています。したがって、継承により、White_Black_Mandel_Imp1.cppは、Mandel.hからこれらの関数を実装する義務があることを知る必要があります。
わかりません。友人の1人が、私のWhite_Black_Mandel.hファイルはMandel.hの正確なコピーである必要があると言っていますが、いくつか追加されていますが、これは本当にばかげているように見えます。意味がありません。
私は何が間違っているのですか?