したがって、動的に割り当てられた基本クラスの配列があります。派生クラスのいくつかのオブジェクトを配列内に格納しました。
学生(基本)クラスとその派生クラスにはすべてgetInfo()
関数があり、明らかに派生クラスはその基本をオーバーライドしていますgetInfo()
。目標はgetinfo
、基本クラスの関数を使用してから、派生クラスの2つのオブジェクトを型クラスに戻し、派生クラスに戻し、オーバーライドされたを使用することgetinfo()
です。
「休憩」までのすべてが完璧に機能します。オブジェクトを派生クラスに型キャストして戻す方法を理解しているので、私は殺されます。
考えられる問題をいくつか特定しました。
1)動的に正しく割り当てられませんでした。私はポインターが嫌いで、ポインターを非常に嫌うので、非常に可能です。
2)実際の型キャストに関してImが何をしているのかわかりません。
注意すべきいくつかのこと:
1)基本クラスのgetinfoは仮想ではありません
2)基本クラスを変更することは許可されていません。
だから、紛らわしいコードの救世主。何て言うの?このかわいそうな生徒を助けてくれませんか。
編集!!!
コードを更新し、「Student**からGradstudent*へのStatic_castは許可されていません」を取得するようになりました
#include <iostream>
#include "GradStudent.h"
#include "UndergradStudent.h"
int main()
{
int arraySize = 3;
Student* classRoom[arraySize];
GradStudent gst1("Ta", "Da", 4444, 'A', "Death");
cout << gst1;
UndergradStudent ust1("Bluh", "Bluh", 2222, 1);
cout << ust1;
Student bst1( "Blah", "Blah", 1111 );
classRoom[0] = &bst1;
classRoom[1] = &gst1;
classRoom[2] = &ust1;
for (int x = 0; x < arraySize; x++)
{
cout << classRoom[x]->getInfo();
cout << endl;
}
cout << "TEST" << endl;
GradStudent* gStudent = static_cast<GradStudent*>(&classRoom[2]);
cout << gStudent->getInfo();
return 0;
}