0
以下のコードの派生クラスTest2とTest3は仮想型ではありません。なぜ関数がオーバーライドされ、どうしてそれが起こらないようにするのですか? P.S - >私は初心者ですので質問は愚かかもしれません。多値継承の多形
#include <iostream>
using namespace std;
class Test {
public:
int a, b, c;
Test(int x, int y, int z) {
a = x;
b = y;
c = z;
}
void print() { cout << "a= " << a << "b= " << b << "c= " << c << endl; }
};
class Test2 : public Test {
public:
int d, e;
Test2(int a, int b, int c, int x, int y) : Test(a, b, c) {
d = x;
e = y;
}
virtual void print() { cout << "d= " << d << "e= " << e << endl; }
};
class Test3 : public Test2 {
public:
int f;
Test3(int a, int b, int c, int d, int e, int x) : Test2(a, b, c, d, e) {
f = x;
}
void print() { cout << "f= " << f << endl; }
};
class Test4 : public Test3 {
public:
int g;
Test4(int a, int b, int c, int d, int e, int f, int x)
: Test3(a, b, c, d, e, f) {
g = x;
}
void print() { cout << "g= " << g << endl; }
};
int main() {
Test *test;
Test2 *test2;
Test3 *test3;
Test4 test4(1, 2, 3, 4, 5, 6, 7);
test = &test4;
test2 = &test4;
test3 = &test4;
test->print();
test2->print();
test3->print();
test4.print();
return 0;
}
はあなたが行動は、あなたが期待しているラインにいたものとどのように異なるかを説明することはできますか? –
'Test2 :: print' *は' Test :: print'を隠して( 'virtual'に再宣言します)、' Test2'のすべての子は 'virtual'として関数を継承します。 – UnholySheep
@UnholySheep印刷にアクセスできないTest2から直接または間接的に派生したクラスのどれですか? –