0

C++ の達人。

C++ でポリモーフィズムを実装しようとしています。仮想関数を使用して基本クラスを作成し、子クラスでその関数を再定義したいと考えています。次に、ドライバー プログラムで動的バインディングを示します。しかし、私はそれを機能させることができませんでした。

私は C# でそれを行う方法を知っているので、C++ コードで C# の構文を使用した場合に構文上の間違いを犯した可能性があると考えましたが、これらの間違いは私にはまったく明らかではありません。ですから、間違いを正していただければ幸いです。

#ifndef POLYTEST_H
#define POLYTEST_H
class polyTest
{
 public:
  polyTest();

  virtual void type();

  virtual ~polyTest();
};
#endif

#include "polyTest.h"
#include <iostream>

using namespace std;

void polyTest::type()
{
 cout << "first gen";
}

#ifndef POLYCHILD_H
#define POLYCHILD_H

#include "polyTest.h"

using namespace std;

class polyChild: public polyTest
{
 public:
  void type();
};

#endif

#include "polyChild.h"
#include <iostream>

void polyChild::type() 
{
  cout << "second gen";
}

#include <iostream>
#include "polyChild.h"
#include "polyTest.h"
int main()
{
  polyTest * ptr1;
  polyTest * ptr2;

  ptr1 = new polyTest();
  ptr2 = new polyChild();

  ptr1 -> type();
  ptr2 -> type();
  return 0;
}

これは単なるテストクラスであり、何もする必要がなく、コンパイラがデフォルトのコンストラクタ/デストラクタを提供するため、コンストラクタまたはデストラクタを実装していないことに気付きました。それがコンパイルエラーが発生する理由でしょうか? そして、なぜそうなるのでしょうか?

4

2 に答える 2

6

ポインターは基本型にある必要があります。

polyTest * ptr1;
polyTest * ptr2;

polyChild であるが polyTest、でpolyTestないpolyChild

于 2013-11-03T21:52:56.553 に答える