第三章資料成員與繼承及指向成員的指標

2022-09-09 05:57:13 字數 1781 閱讀 6965

一、非多型繼承

1.派生類中每個基類的子物件都要保持其完整性,即每個子物件都與獨立物件記憶體布局相同,都會經過alignment(會造成**膨脹)

2.物件拷貝的內容根據指標型別決定,如下列**只拷貝子物件concrete1的內容(不論指標實際指向**)

concrete1 *pc1_1,*pc1_2;

*pc1_2=*pc1_1;

二、多重繼承

②多重繼承中的其餘繼承鏈均不滿足自然多型需要將指標進行轉換。如下圖,基類vertex到最終派生類vertex3d需要進行位址轉換。並且當實現多型的是指標時還需要測試條件(測試是不是空指標,引用不需要,引用不能繫結到nullptr)

vertex3d v3d;

vertex *pv;

point2d *p2d;

point3d *p3d;

//第一繼承鏈,直接拷貝位址

p2d=&v3d;

p3d=&v3d;

//引用

pv=&v3d;

//轉換為

pv=(vertex*)(((char*)&v3d)+sizeof

(point3d));

//指標

vertex3d *pv3d;

pv=pv3d;

//轉化

三、虛擬繼承

1.傳統虛擬繼承模型:在每個派生類中新增乙個指向基類子物件的指標

造成的問題①每乙個物件針對每乙個虛基類都要產生乙個指標。(類物件的記憶體不固定隨虛基類的數量變化)

②訪問層次增加(如果有多層虛擬派生,則訪問需要經過多次指向虛基類的指標)

2.現代虛擬繼承模型:

(1)解決第二個問題:將指向虛基類的指標放入到所有派生類物件當中。(空間換時間)

(2)解決第乙個問題:

①microsoft引入虛基類表。類中增加乙個指向虛基類表,表中存放真正的指向虛基類的指標。

②在虛函式表中放置虛基類的偏移offset。sun編譯器虛函式表中正值索引代表虛函式,負值索引代表虛基類的偏移。

四、指向成員的指標

1.形式: t class::*x。其中t為型別,class為類名,x為類class的成員。

2.使用:object.*x  代表訪問物件object的成員x

4.作用可以用來確定物件在記憶體中的排列順序或者記憶體的布局 &class::x > &class::y 代表x排列在y之前(若x和y在同一訪問域則代表y宣告在x宣告之前)

5.訪問效率:未經過編譯器優化時效率低於直接訪問(多了一層指標的訪問具有間接性)。

第三章 類和成員

1 類和結構 1 類和結構實際上都是建立物件的模板,每個物件都包含資料,並提供了處理和訪問資料的方法。class phonecustomer 2 結構與類的區別是它們在記憶體中的儲存方式 類是儲存在堆 heap 上的引用型別,而結 構是儲存在堆疊 stack 上的值型別 訪問方式和一些特徵 如結構不...

第三章 繼承

通過擴充套件或者修改既有類來定義新類的方法叫做繼承 inheritance 子類可以 追加新的方法 追加新的例項變數 重寫定義父類中的方法 父類和子類是一種相對稱呼 在集合用語中,子集指的是比較小的集合,但在類的情況下子類一般是父類的擴充套件。oc有唯一根類,所有物件直接或間接繼承了nsobject...

第三章,檢索資料

select prod name from products 上述語句利用select 語句從products表中檢索乙個名為prod name的列,所需要的列名在select 關鍵字之後給出,from關鍵字指出從其中檢索資料的表名 select prod name,prod id,prod nam...