欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

舉例:

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

這會(huì)導(dǎo)致對(duì)象切片

#include <iostream>
#include <string>

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

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

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

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

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

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

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

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

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

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

#include <iostream>
#include <string>

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

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

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

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

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

    // 使用派生類對(duì)象 stu 來初始化一個(gè)基類的引用
    Person& per_ref = stu;

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

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

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

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

#include <iostream>
#include <string>

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Qt控件之QToolButton的使用及示例

    Qt控件之QToolButton的使用及示例

    QToolButton類提供了一個(gè)快速訪問命令或選項(xiàng)的按鈕,通常在QToolBar內(nèi)部使用,本文主要介紹了Qt控件之QToolButton的使用及示例,感興趣的可以了解一下
    2023-10-10
  • C語言SQLite3事務(wù)和鎖的操作實(shí)例

    C語言SQLite3事務(wù)和鎖的操作實(shí)例

    這篇文章主要介紹了C語言SQLite3事務(wù)和鎖的操作,結(jié)合完整實(shí)例形式分析了C語言針對(duì)SQLite3數(shù)據(jù)庫的事務(wù)與鎖相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • Qt實(shí)現(xiàn)字幕無間隙滾動(dòng)效果

    Qt實(shí)現(xiàn)字幕無間隙滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)字幕無間隙滾動(dòng)效果,文中的實(shí)現(xiàn)過程講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • 教你用c++從頭開始實(shí)現(xiàn)決策樹

    教你用c++從頭開始實(shí)現(xiàn)決策樹

    從頭實(shí)現(xiàn)一個(gè)分類決策樹分類器似乎是一個(gè)適當(dāng)?shù)奶魬?zhàn)。這已經(jīng)被證明是一個(gè)測(cè)試但有益的學(xué)習(xí)旅程,我想分享一些我在這個(gè)過程中的主要經(jīng)驗(yàn),對(duì)c++實(shí)現(xiàn)決策樹相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05
  • C語言多種方法實(shí)現(xiàn)一個(gè)函數(shù)左旋字符串中K個(gè)字符

    C語言多種方法實(shí)現(xiàn)一個(gè)函數(shù)左旋字符串中K個(gè)字符

    這篇文章主要為大家介紹了C語言多種方法實(shí)現(xiàn)一個(gè)函數(shù),可以左旋字符串中K個(gè)字符,文中附含詳細(xì)的示例講解,有需要的朋友可以借鑒參考下
    2021-10-10
  • C語言結(jié)構(gòu)體計(jì)算內(nèi)存占用問題解析

    C語言結(jié)構(gòu)體計(jì)算內(nèi)存占用問題解析

    這篇文章主要介紹了C語言結(jié)構(gòu)體計(jì)算內(nèi)存占用問題解析,本文通過案例來解析了C語言計(jì)算結(jié)構(gòu)體內(nèi)存的方式和方法,需要的朋友可以參考下
    2021-07-07
  • Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程

    Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程

    這篇文章主要介紹了Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程 ,需要的朋友可以參考下
    2020-02-02
  • vc控制臺(tái)程序關(guān)閉事件時(shí)的處理方式及注意點(diǎn)詳解

    vc控制臺(tái)程序關(guān)閉事件時(shí)的處理方式及注意點(diǎn)詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于vc控制臺(tái)程序關(guān)閉事件時(shí)的正確處理方式的相關(guān)知識(shí)點(diǎn)內(nèi)容,對(duì)此有需求的朋友們可以參閱下。
    2021-12-12
  • C語言中棧的兩種實(shí)現(xiàn)方法

    C語言中棧的兩種實(shí)現(xiàn)方法

    棧的實(shí)現(xiàn)方式有兩種,一種方法是使用指針,而另一種方法則是使用數(shù)組,這篇文章主要介紹了C語言中棧的兩種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2021-08-08
  • C++多線程之unique_lock的使用詳解

    C++多線程之unique_lock的使用詳解

    本文主要介紹了C++多線程之unique_lock的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04

最新評(píng)論