私はまだC++を学んでいます。私は多態性がどのように機能するかを試していました。仮想メソッドを呼び出すときにセグメント化エラーが発生しました。このコードで仮想メソッドを呼び出すと、セグメンテーションフォルトが発生するのはなぜですか?
(注:私は、私は何が起こるか見にしようとしていた仮想としてデストラクタをマークしていなかった)ここでは、コードです:
#include <iostream>
using namespace std;
class Base
{
protected:
char *name;
public:
Base(char *name)
{
cout << name << ": Base class cons" << endl;
}
~Base()
{
cout << name << ": Base class des" << endl;
}
virtual void disp();
};
void Base::disp()
{
cout << name << ": Base disp()" << endl;
}
class Child : public Base
{
public:
Child(char *name):
Base(name)
{
cout << name << ": Child class cons" << endl;
}
~Child()
{
cout << name << ": Child class des" << endl;
}
virtual void disp()
{
cout << name << ": Child disp()" << endl;
}
};
int main()
{
//Base b;
//b.disp();
Base c = Child("2");
c.disp();
}
は、また、あなたはに関するその他のヒントをしている場合Javaでこれらの概念を知っている人にとっては、一般的に継承と多型の使用方法について教えてください。ありがとうございました!
エラーが発生し、呼び出し元のコードを表示してください:ここでは
は、両方のこれらの問題を修正したコードです。 – dwc
baydaがそれを呼び出しました。セグメンテーションフォールトを修正するには、Baseコンストラクタを 'Base(char * name):name(name){...} 'のように書き直す必要があります。 –