派生クラスB::display()
とC::display()
を使用しますが、A::display()
を使用します。派生クラス 'display()
をname
と一緒にid
と表示するようにコードを変更するにはどうすればよいですか?事前に
感謝:)C++サブクラス関数を呼び出す方法
#include <iostream>
#include <vector>
using namespace std;
class A
{
protected :
int id;
public:
A (int id = 0) : id(id) {}
virtual void display() { cout << id << endl; }
};
class B : public A
{
string name;
public:
B (int id = 0, string name = "-") : A(id), name(name) {}
void display() { cout << id << " " << name << endl; }
};
class C : public A
{
string name;
public:
C (int id = 0, string name = "-") : A(id), name(name) {}
void display() { cout << id << " " << name << endl; }
};
int main()
{
vector< vector <A> > aa;
vector<A> bb ;
vector<A> cc ;
A *yy = new B(111, "Patrick");
A *zz = new C(222, "Peter");
bb.push_back(*yy);
cc.push_back(*zz);
aa.push_back(bb);
aa.push_back(cc);
for (int i = 0; i < aa[0].size(); i++)
{
aa[0][i].display();
aa[1][i].display();
}
}
に変更して、あなたがベクトルにポインタを保存していないという問題を修正してください。ベクトルをこれに変更する場合:ベクトルが動作します。 –
私はそれがスーパークラスで仮想であると宣言すると、サブクラスの関数は自動的に仮想になると思ったのですか? – Jess
ええ、私はあなたのスーパークラスのディスプレイが仮想であることに気付かなかったのです。私は最初のコメントを編集しました。 –