国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++對象切片探秘:派生類對象如何被‘切割’?

這篇具有很好參考價值的文章主要介紹了C++對象切片探秘:派生類對象如何被‘切割’?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

C++對象切片探秘:派生類對象如何被‘切割’?

?

概述:C++中的對象切片指通過將派生類對象賦值給基類對象,導(dǎo)致派生部分被“切掉”,只保留基類部分。這可能發(fā)生在值傳遞、賦值等操作中。對象切片的基礎(chǔ)功能示例展示了派生類對象賦值給基類對象時的現(xiàn)象,而高級功能示例則展示了通過基類指針實現(xiàn)派生類對象的訪問和多態(tài)。

對象切片(Object Slicing)是指通過將派生類對象賦值給基類對象,導(dǎo)致派生類對象的派生部分被“切掉”,只保留基類部分的現(xiàn)象。這通常發(fā)生在使用值傳遞或賦值操作時。

基礎(chǔ)功能:

示例源代碼:

#include <iostream>
#include <string>

class Base {
public:
    Base(int baseData) : baseData_(baseData) {}
    virtual void Print() const {
        std::cout << "基類數(shù)據(jù):" << baseData_ << std::endl;
    }
private:
    int baseData_;
};

class Derived : public Base {
public:
    Derived(int baseData, const std::string& derivedData)
        : Base(baseData), derivedData_(derivedData) {}
    void Print() const override {
        std::cout << "基類數(shù)據(jù):" << GetBaseData() << ", 派生類數(shù)據(jù):" << derivedData_ << std::endl;
    }
private:
    std::string derivedData_;
};

void DisplayBaseObject(const Base& obj) {
    obj.Print();
}

int main() {
    Derived derivedObject(42, "派生數(shù)據(jù)");
    
    // 對象切片發(fā)生,只保留基類部分
    Base baseObject = derivedObject;
    DisplayBaseObject(baseObject);

    return 0;
}

在這個示例中,Derived?類公有繼承自?Base?類,當(dāng)派生類對象?derivedObject?被賦值給基類對象?baseObject?時,發(fā)生了對象切片。雖然?derivedObject?包含派生類的數(shù)據(jù)成員,但只有基類部分被保留。

高級功能:

示例源代碼:

#include <iostream>
#include <memory>

class Base {
public:
    virtual void Print() const {
        std::cout << "基類數(shù)據(jù):" << baseData_ << std::endl;
    }
protected:
    int baseData_ = 0;
};

class Derived : public Base {
public:
    void Print() const override {
        std::cout << "基類數(shù)據(jù):" << baseData_ << ", 派生類數(shù)據(jù):" << derivedData_ << std::endl;
    }
private:
    std::string derivedData_ = "派生數(shù)據(jù)";
};

int main() {
    std::unique_ptr<Base> basePtr = std::make_unique<Derived>(); // 指向派生類對象的基類指針

    // 通過基類指針調(diào)用虛函數(shù),實現(xiàn)多態(tài)
    basePtr->Print();

    return 0;
}

在這個示例中,通過使用智能指針?std::unique_ptr,可以實現(xiàn)指向派生類對象的基類指針。通過基類指針調(diào)用虛函數(shù)?Print,實現(xiàn)了多態(tài)性。這也是對象切片的一種應(yīng)用,通過基類指針可以訪問派生類的虛函數(shù)。

?

C++對象切片探秘:派生類對象如何被‘切割’?文章來源地址http://www.zghlxwxcb.cn/news/detail-842278.html

到了這里,關(guān)于C++對象切片探秘:派生類對象如何被‘切割’?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【淺嘗C++】繼承機(jī)制=>虛基表/菱形虛繼承/繼承的概念、定義/基類與派生類對象賦值轉(zhuǎn)換/派生類的默認(rèn)成員函數(shù)等詳解

    【淺嘗C++】繼承機(jī)制=>虛基表/菱形虛繼承/繼承的概念、定義/基類與派生類對象賦值轉(zhuǎn)換/派生類的默認(rèn)成員函數(shù)等詳解

    ??專欄介紹:淺嘗C++專欄是用于記錄C++語法基礎(chǔ)、STL及內(nèi)存剖析等。 ??每日格言:每日努力一點點,技術(shù)變化看得見。 我們生活中也有繼承的例子,例如:小明繼承了孫老師傅做拉面的手藝。繼承就是一種延續(xù)、復(fù)用的方式。C++為了提高代碼的可復(fù)用性,引入了繼承機(jī)制,

    2024年04月10日
    瀏覽(32)
  • 【Unity每日一記】如何從圖片中切割對象(一鍵切割圖集的方法你掌握了嗎?)

    【Unity每日一記】如何從圖片中切割對象(一鍵切割圖集的方法你掌握了嗎?)

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity每日一記 ?【軟件設(shè)計師高頻考點暴擊】 ?【Unityc#專題篇】之c#系統(tǒng)化大禮包】 ?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs ?【u

    2024年04月09日
    瀏覽(29)
  • 探秘C++中的神奇組合:std--pair的魅力之旅

    在C++編程中,我們常常會遇到需要將兩個相關(guān)的數(shù)據(jù)元素組合在一起的情況。為了滿足這一需求,C++標(biāo)準(zhǔn)庫提供了一個名為std::pair的實用工具,可以將兩個數(shù)據(jù)元素組合成一個對象。std::pair不僅易于使用,而且在實際編程中有著廣泛的應(yīng)用。 本文將詳細(xì)介紹std::pair的定義、基

    2023年04月16日
    瀏覽(18)
  • 學(xué)習(xí)C++:C++進(jìn)階(六)如何在C++代碼中調(diào)用python類,實例化python中類的對象,如何將conda中的深度學(xué)習(xí)環(huán)境導(dǎo)入C++項目中

    目錄 1.應(yīng)用場景 2.場景:利用maskrcnn深度學(xué)習(xí)網(wǎng)絡(luò)實現(xiàn)語義分割 3.CMake配置python解釋器

    2023年04月22日
    瀏覽(22)
  • 基類與派生類對象的關(guān)系 派生類的構(gòu)造函數(shù)

    基類與派生類對象的關(guān)系 派生類的構(gòu)造函數(shù)

    ??博主主頁: @??. 一懷明月?? ????? 專欄系列: 線性代數(shù),C初學(xué)者入門訓(xùn)練,題解C,C的使用文章,「初學(xué)」C++ ?? 座右銘: “不要等到什么都沒有了,才下定決心去做” ??????大家覺不錯的話,就懇求大家點點關(guān)注,點點小愛心,指點指點?????? 目錄 ??

    2023年04月10日
    瀏覽(23)
  • c++繼承和派生(1)

    c++繼承和派生(1)

    目錄 1.含義:從不同層面看的,同一種意思 2. 繼承的使用場景? 1.? 共同之處? 2.? 迭代更新? 3.? 代碼重構(gòu)? 3. 繼承的基本語法? 4. 繼承了什么? 1. 查看占用內(nèi)存大小 2.? 使用vs自帶的功能查看類的內(nèi)存分布 布局:? 3. 結(jié)果? 5. protected? -- 子類的特權(quán) 1)??三個訪問權(quán)限? 2)

    2024年01月17日
    瀏覽(15)
  • 高程 | 繼承與派生(c++)

    高程 | 繼承與派生(c++)

    ?? 概念 類的 繼承 ,是新的類從已有類那里 得到已有的特性 。 類的 派生 ,從已有類 產(chǎn)生新類的過程 。 原有的類稱為基類或父類,產(chǎn)生的新類稱為派生類或子類。 直接參與派生出某類的基類稱為直接基類,基類的基類甚至更高層的基類稱為間接基類。 ?? 語法 class

    2024年02月19日
    瀏覽(10)
  • c++ 派生類 文本查詢程序再探

    2024年02月14日
    瀏覽(14)
  • C++ | 繼承(基類,父類,超類),(派生類,子類)

    文章參考:https://blog.csdn.net/war1111886/article/details/8609957 一 .繼承中的訪問權(quán)限關(guān)系 1.基類,父類,超類是指被繼承的類,派生類,子類是指繼承于基類的類.? 2.在C++中使用: 冒號表示繼承,如class A : public B;表示派生類A從基類B繼承而來 3.派生類包含基類的所有

    2024年02月15日
    瀏覽(60)
  • HotSpot 虛擬機(jī)對象探秘

    HotSpot 虛擬機(jī)對象探秘

    在 HotSpot 虛擬機(jī)中,對象的內(nèi)存布局分為以下 3 塊區(qū)域: 對象頭(Header) 實例數(shù)據(jù)(Instance Data) 對齊填充(Padding) 對象頭 對象頭記錄了對象在運行過程中所需要使用的一些數(shù)據(jù): 哈希碼 GC 分代年齡 鎖狀態(tài)標(biāo)志 線程持有的鎖 偏向線程 ID 偏向時間戳 對象頭可能包含類型

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包