目錄
1.物件切割的場景
2.物件切割的避免方法
2.1使用引用
2.2使用指標
2.3使用純虛函式
c++中,乙個子類物件可以直接賦值給乙個基類物件,但是反之則不行。
如下例子所示:
class base ;
class derived : public base ;
int main()
物件切割發生在乙個子類物件賦值給基類物件時,子類自有的資料成員會在基類的物件中被切割掉。
#include using namespace std;
class base
virtual void display()
};class derived : public base
virtual void display()
};// 全域性函式.按值傳遞引數.
void somefunc(base obj)
int main()
輸出:
base class object, i=33
base class object, i=45
可以使用指標或者引用來避免這個問題。當使用指標或者引用來傳遞函式引數時,則不會發生物件切割。因為對於任何型別來說,指標都是占用相同記憶體大小的。
例如,如果把上面程式中的全域性函式somefunc() 修改為下面**,則不會產生物件切割問題。
void somefunc(base &obj)
輸出:
base class object, i=33
derived class object, i=45, j=54
同樣,如果使用指標,也能得到同樣的結果
void somefunc(base *objp)
int main()
輸出:
base class object, i=33
derived class object, i=45, j=54
也可以將基類成員函式定義為純虛函式,來避免物件切割問題。因為虛基類是不能生成物件的。
2018 3 6 物件的繼承
物件繼承 類a具有某些特徵,類 b也具有 a類的所有特徵,同時具有自己更多的一些特徵,此時發現,b類使用 a的特徵資訊並繼續新增自己的一些特有特徵資訊。我們可以說b類繼承於a類。class jizuidongwu class human extends jizuidongwu person1 new...
PHP5物件體系
8 class constants 類常量 php5中可以使用const關鍵字來定義類常量。class foo echo foo c n 11 method constant method 常量 method 是php5中新增的 魔術 常量,表示類方法的名稱。魔術常量是一種php預定義常量,它的值可...
C 基礎學習(5) 物件陣列和物件指標
4.this指標 1.物件陣列的定義和使用說明 在建立物件陣列的時候需要呼叫建構函式,有多少個物件就要呼叫多少次建構函式 如果物件陣列所屬類有帶引數的建構函式,可用初始化列表按順序呼叫建構函式,使用複製初始化來初始化來初始化每個陣列元素 如果物件陣列所屬類有單個引數時,定義陣列時可以直接在初始化列表...