注: これは宿題です。
私は現在、大規模なプロジェクトに取り組んでいます.3つのクラス(私たちが焦点を当てます)、基本クラスのStudent、および2つの派生クラスGradとUndergradがあり、学生クラスを明示的に使用することはありません.しかし、学生にタイプキャストされた卒業生と学部生の両方を含むリンクリストを作成するつもりはありません.私の質問は、派生クラスでカスケードを実装する方法についてです.
私の基本クラスには小さな関数があり、Undergrad で完全に上書きされた実装があります
基本クラス:
virtual UnderGrad& setMajor(std::string) {}
大学生:
//purpose: sets the major
UnderGrad& UnderGrad::setMajor(std::string maj)
{
major = maj;
return *this;
}
これが正しいのか、それとも関数の正しい実装なのか疑問に思っているので、次のようなカスケードを使用できます
curStudent.setStudentNum().setMajor()......
私がしていることは正しいですか?もしそうなら、私の基本クラスは何を返すべきですか? すなわち
return *(new Undergrad(....));
編集 いくつかの質問に答えるには、Grad と UnderGrad の 2 つのクラスを保持するリンク リストが必要です。これらのリストを並べ替えるには、とりわけ、派生クラス (一意の変数) にアクセスする必要がありますが、私は持っています。それらは Student にキャストされます (割り当てで必要なため)。そのため、クラス固有のデータにアクセスするには、それにアクセスするために記述された仮想メソッドが必要です (はい、私の意見では、それは役に立たないようで、1 つのクラスの Student でできることはすべて実行できます)。これらの 3 では、1 つのクラスを持つことはできません) したがって、そうでなければ「手の届かない」変数にアクセスするために、特に派生クラスで使用する仮想メソッドを作成するのは間違っています。次に、Undergrad のコンストラクターはメジャーを設定しますが、データを編集したい場合は、古いデータをすべて取得して古いノードを削除し、古いデータと新しいメジャーで新しいノードを作成するのは冗長に思えます
以下のコメントでのクリスの回答は、まさに私が必要としていたものだと思います