渡すオブジェクトへの参照を持つ関数にオブジェクトを渡しているときに子クラスが呼び出されていますが、オブジェクト基底クラスとしての引数が呼び出されています。以下の例は、私の疑いが何であるかを明確にします。オブジェクトを参照型として引数を持つ関数に渡したときと、オブジェクトを渡すときに別の出力が出る
#include <iostream>
using namespace std;
class Base
{
protected:
int i;
public:
Base(int a) { i = a; }
virtual void display()
{ cout << "I am Base class object, i = " << i << endl; }
};
class Derived : public Base
{
int j;
public:
Derived(int a, int b) : Base(a) { j = b; }
virtual void display()
{ cout << "I am Derived class object, i = "
<< i << ", j = " << j << endl; }
};
// Global method, Base class object is passed by value
void somefunc (Base &obj)
{
obj.display();
}
int main()
{
Base b(33);
Derived d(45, 54);
somefunc(b);
somefunc(d); // Object Slicing, the member j of d is sliced off
return 0;
}
O/P:私は基本クラスオブジェクト、I = 33 I午前派生クラスオブジェクト、I = 45、J = 54
iが "void somefunc (Base obj)
"
次に宣言していた場合出し O/Pは次のとおりです。私は、私は= 33私は、私は= 33
はあなたが1st
場合には言及してい
ご質問はありますか? – Beginner