亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++內(nèi)存對象布局小測試

 更新時間:2023年12月08日 08:36:46   作者:柏下微雨  
這篇文章主要介紹了C++內(nèi)存對象布局小測試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

對象布局

如圖:

布局測試

如果不了解的讀者可以自行學(xué)習(xí),在此我對對象布局做一些測試,代碼如下:

class Point2D {
public:
    Point2D(int x, int y) :x(x), y(y) {}
    Point2D(const Point2D& p) {
        cout << "copy2d" << endl;
        x = p.x, y = p.y;
    }
    virtual void print() const{
        cout << x << " " << y << endl;
    }
    virtual ~Point2D() {}
protected:
    int x;
    int y;
};
class Point3D : public Point2D {
public:
    Point3D(int x, int y, int z) :Point2D(x, y), z(z) {}
    virtual void print()const {
        cout << x << " " << y << " " << z << endl;
    }
private:
    int z;
};
int main() {
    Point2D* p2d = new Point3D(1, 2, 3);
    Point2D p2d2 = Point3D(1,2,3);//輸出copy2d
    p2d->print();//1)輸出為1,2,3
    p2d2.print();//2)輸出為1,2
    Point2D p2d1 = *p2d;//輸出copy2d
    p2d1.print();//3)輸出為1,2
    (*p2d).print();//4)輸出為1,2,3
    Point3D* p3d = p2d;//Point2D*類型的值不能用于初始化Point3D*類型的實(shí)體
}

分析

首先我們需要知道,為什么只有指針和引用可以實(shí)現(xiàn)多態(tài),而普通的對象聲明不可以。因?yàn)橹羔樅鸵貌⒉恢付ㄋ笇ο蟮拇笮。ㄖ羔槺旧碇徽?個字節(jié)),當(dāng)把子類指針賦值給父類指針時(如main函數(shù)里第一句語句),不會報錯,并且由于虛函數(shù)表的存在,父類指針成功間接訪問到了子類定義的虛函數(shù)。

而將子類對象賦值給父類對象時(如main函數(shù)里第二句語句),實(shí)際上是調(diào)用了一個拷貝構(gòu)造函數(shù),并將子類轉(zhuǎn)型為父類對象傳進(jìn)拷貝構(gòu)造函數(shù))自然無法產(chǎn)生多態(tài)。

再看3)的輸出,其實(shí)和2)同理,調(diào)用拷貝構(gòu)造函數(shù)

4)的輸出自然也沒有問題,取得同一個地址空間的虛函數(shù)。

參考:https://www.bilibili.com/video/BV1v64y1q7JT/?p=1&spm_id_from=...,《深度探索C++對象模型》

以上就是C++內(nèi)存對象布局小測試的詳細(xì)內(nèi)容,更多關(guān)于C++內(nèi)存對象布局的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論