0
當我有參考傳球對象傳遞對象給一個函數,子類獲取調用,但是當我宣佈作爲對象基類的參數被調用。下面的例子將清楚我的疑問。傳遞對象到其參數爲引用類型和功能時得到不同的出放時它的類的對象類型
#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 = 45,J = 54
如果我聲明 「void somefunc (Base obj)
」
然後出放爲 O/P: 我基類對象,I = 33 我基類對象,I = 33
您在1st
情況下都提到
你的問題是什麼? – Beginner