クラス baseclass のオブジェクトがあるとします。
// baseclass.h
class baseclass
{
baseclass() # default constructor, constructs baseclass object
}
そして、ベースクラスの .cpp で:
// baseclass.cpp
baseclass::baseclass()
{
// member functions and variables
}
ここでの目標は、派生クラスを作成し、派生クラスの既定のコンストラクターで、静的なサイズnの基本クラス オブジェクトの配列を作成することです。明確にするために、これを考える別の方法は、ベースクラスをトランプとして考えることです。派生クラスでデフォルトのコンストラクターを呼び出して、これらのカードの配列 (デッキ) を作成したいと考えています。ただし、質問の範囲を抽象化しておくことにしたので、ベース/派生を引き続き使用して、他の人がこれがどのように適用されるかをより簡単に確認できるようにします。
これをオブジェクト指向の方法で設定する最善の方法がわかりません。これまでのところ、このようなものがありますが、セグメンテーション違反が発生しています。設定方法は次のとおりです。
// derivedclass.h (extending baseclass)
class derivedclass
{
// default constructor for derivedclass object
derivedclass();
// a pointer to an object of type baseclass
baseclass* bar;
// or should it be:
baseclass* bar[n] // where n is an integer
// or is there a better way to do it?
}
最後に、派生クラス オブジェクトは配列を持つことができると述べたので、派生クラスの .cpp の既定のコンストラクターに対してそれを真にする必要があります。
// derivedclass.cpp
derivedclass::derivedclass()
{
// so I need to initialize the member array
baseclass* bar = new baseclass[n] // where n is the size I want to initialize
// the array to
}
それでは、私がリストした状況のいずれかがセグメンテーション違反を引き起こすでしょうか? このオブジェクトの配列を作成する最良の方法は何ですか? これが初心者の質問である場合は申し訳ありません。私はまだメモリ割り当てとポインターについて多くを学んでいる学生であり、通常はこれについて心配する必要のない言語を扱っています。また、他の人の利益のために、質問を抽象的に保つように努めました。前もって感謝します!