最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++類型兼容性規(guī)則

 更新時間:2025年10月10日 09:20:00   作者:吳e凡  
本文主要介紹了詳解C++類型兼容性規(guī)則,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一個公有派生類的對象在使用上可以被當作基類的對象,反之則禁止。具體表現(xiàn)在:

  1. 派生類的對象可以被賦值給基類對象。
  2. 派生類的對象可以初始化基類的引用。
  3. 指向基類的指針也可以指向派生類。

通過基類對象名、指針只能使用從基類繼承的成員

舉例:

1.派生類的對象可以被賦值給基類對象。這是一個總綱領(lǐng),意味著在需要基類對象的地方,我們都可以用一個派生類對象來替代。

這會導致對象切片

#include <iostream>
#include <string>

// 基類
class Person {
public:
    std::string name;

    void introduce() {
        std::cout << "我是一個人, 我的名字是 " << name << std::endl;
    }
};

// 公有派生類
class Student : public Person {
public:
    int studentID; // 派生類特有的成員

    void study() { // 派生類特有的方法
        std::cout << name << " 正在學習, 學號是 " << studentID << std::endl;
    }
};

int main() {
    Student stu;
    stu.name = "張三";
    stu.studentID = 101;

    Person per;
    per = stu; // 將派生類對象 stu 賦值給 基類對象 per

    std::cout << "基類對象 per 的名字: " << per.name << std::endl;
    per.introduce();

    // per.studentID = 102; // 錯誤! per 是一個 Person 對象, 它沒有 studentID 成員。
    // per.study();         // 錯誤! per 是一個 Person 對象, 它沒有 study() 方法。
}

解釋:
當執(zhí)行 per = stu; 時,stu 對象中從 Person 繼承來的部分(也就是 name 成員)被拷貝到了 per 對象中。stu 對象自己獨有的成員(studentID)被完全“切掉”和丟棄了。因此,per 仍然是一個純粹的 Person 對象,它只知道 name,不知道任何關(guān)于 studentID 或 study() 的信息。

2.派生類的對象可以初始化基類的引用。這是實現(xiàn)多態(tài)的一種非常安全和常見的方式,不會發(fā)生對象切片

#include <iostream>
#include <string>

// 基類
class Person {
public:
    std::string name;

    void introduce() {
        std::cout << "我是一個人, 我的名字是 " << name << std::endl;
    }
};

// 公有派生類
class Student : public Person {
public:
    int studentID; // 派生類特有的成員

    void study() { // 派生類特有的方法
        std::cout << name << " 正在學習, 學號是 " << studentID << std::endl;
    }
};

int main() {
    Student stu;
    stu.name = "李四";
    stu.studentID = 102;

    // 使用派生類對象 stu 來初始化一個基類的引用
    Person& per_ref = stu;

    std::cout << "通過基類引用訪問名字: " << per_ref.name << std::endl;
    per_ref.introduce(); // 調(diào)用的是 Person 的方法

    // per_ref.study(); // 錯誤! 雖然引用指向的是 Student 對象,但引用本身是 Person 類型,
                       // 只能訪問 Person 中定義的成員。
}

解釋:
per_ref 是基類 Person 的一個引用,它直接綁定到了 stu 這個派生類對象上。內(nèi)存中只有一個 stu 對象,沒有發(fā)生任何拷貝。per_ref 成為了 stu 對象的一個“別名”,但這個別名是 Person 類型的,所以它有一個受限的“視野”。

3.指向基類的指針也可以指向派生類。這是實現(xiàn)多態(tài)最核心、最靈活的方式,同樣不會發(fā)生對象切片。

#include <iostream>
#include <string>

// 基類
class Person {
public:
    std::string name;

    void introduce() {
        std::cout << "我是一個人, 我的名字是 " << name << std::endl;
    }
};

// 公有派生類
class Student : public Person {
public:
    int studentID; // 派生類特有的成員

    void study() { // 派生類特有的方法
        std::cout << name << " 正在學習, 學號是 " << studentID << std::endl;
    }
};

int main() {
    Student stu;
    stu.name = "王五";
    stu.studentID = 103;

    // 基類指針指向派生類對象
    Person* per_ptr = &stu;

    std::cout << "通過基類指針訪問名字: " << per_ptr->name << std::endl;
    per_ptr->introduce(); // 調(diào)用的是 Person 的方法

    // per_ptr->study(); // 錯誤! 指針類型是 Person*,它“看”不到 Student 類中新增的成員。
}

解釋:
`per_ptr` 是一個 `Person` 類型的指針,它存儲了 `stu` 對象的內(nèi)存地址。和引用一樣,它也只是提供了一個基類“視角”來觀察這個派生類對象。

到此這篇關(guān)于詳解C++類型兼容性規(guī)則的文章就介紹到這了,更多相關(guān)C++類型兼容性規(guī)則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳情介紹C++之命名空間

    詳情介紹C++之命名空間

    這篇文章主要詳情介紹了C++命名空間,命名空間的出現(xiàn)就是為了解決名稱沖突問題,對此感興趣的朋友可以參考下面文章
    2021-09-09
  • 基于C++編寫一個進度條的示例代碼

    基于C++編寫一個進度條的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)一個命令行進度條,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-06-06
  • C++與C語言的區(qū)別你知道嗎

    C++與C語言的區(qū)別你知道嗎

    這篇文章主要為大家詳細介紹了C++與C的區(qū)別,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++印刷模板使用方法詳解

    C++印刷模板使用方法詳解

    模板是C++支持參數(shù)化多態(tài)的工具,使用模板可以使用戶為類或者函數(shù)聲明一種一般模式,使得類中的某些數(shù)據(jù)成員或者成員函數(shù)的參數(shù)、返回值取得任意類型
    2022-11-11
  • Qt實現(xiàn)網(wǎng)絡聊天室的示例代碼

    Qt實現(xiàn)網(wǎng)絡聊天室的示例代碼

    本文主要介紹了Qt實現(xiàn)網(wǎng)絡聊天室,實現(xiàn)一個在線聊天室, 使用tcp對客戶端和服務器端進行通訊。具有一定的參考價值,具有一定的參考價值,
    2021-06-06
  • opencv提取輪廓大于某個閾值的圖像

    opencv提取輪廓大于某個閾值的圖像

    這篇文章主要為大家詳細介紹了opencv提取輪廓大于某個閾值的圖像,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++實現(xiàn)簡易UDP網(wǎng)絡聊天室

    C++實現(xiàn)簡易UDP網(wǎng)絡聊天室

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡易UDP網(wǎng)絡聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++實現(xiàn)LeetCode(209.最短子數(shù)組之和)

    C++實現(xiàn)LeetCode(209.最短子數(shù)組之和)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(209.最短子數(shù)組之和),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 求解旋轉(zhuǎn)數(shù)組的最小數(shù)字

    求解旋轉(zhuǎn)數(shù)組的最小數(shù)字

    這篇文章主要介紹了求解旋轉(zhuǎn)數(shù)組的最小數(shù)字的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 淺析C++中的動態(tài)內(nèi)存分配

    淺析C++中的動態(tài)內(nèi)存分配

    這篇文章主要為大家詳細介紹了C++中動態(tài)內(nèi)存分配的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03

最新評論

乐东| 从化市| 鄂托克前旗| 沈丘县| 泉州市| 会理县| 耒阳市| 横峰县| 巴林右旗| 白城市| 盘锦市| 炉霍县| 镇巴县| 新余市| 景德镇市| 东安县| 濉溪县| 大悟县| 报价| 龙游县| 湘潭县| 尼勒克县| 定远县| 泰安市| 汕尾市| 武冈市| 驻马店市| 韶关市| 汶川县| 广昌县| 叙永县| 祥云县| 叶城县| 高雄市| 遂溪县| 新蔡县| 盱眙县| 锡林浩特市| 祁门县| 富民县| 凤翔县|