女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

什么是多態(tài)?

汽車電子技術 ? 來源:C語言Plus ? 作者:Maye426 ? 2023-02-27 15:58 ? 次閱讀

什么是多態(tài)?

父類指針即根據(jù)指向的不同對象,響應同一消息(函數(shù)調(diào)用),產(chǎn)生不同行為。

多態(tài)三要素?

1,繼承

2,虛函數(shù)重寫

3,父類指針(引用)指向子類對象

多態(tài)的實現(xiàn)很簡答,讓我們來看一段代碼

#include
using namespace std;
class Parent
{
public:
  virtual void show()
{
    cout << "我是你爹" << endl;
  }
};
class Child:public Parent//1,繼承
{
public:
  virtual void show()//2,虛函數(shù)重寫
{
    cout << "我是你崽" << endl;
  }
};


int main()
{
  Parent *pa = new Child;//3,父類指針指向子類對象
  pa->show();


  getchar();
  return 0;
}
//結果輸出的是子類的show函數(shù)--"我是你崽"

實現(xiàn)很簡單,但是這又是什么原理呢?

當我們在類中聲明了虛函數(shù)之后,編譯器會給類添加一個vptr指針,當定義對象的時候,會把所有虛函數(shù)放入一個叫虛函數(shù)表的順序表,然后用vptr指針指向虛函數(shù)表。當進行pa->show();調(diào)用的時候,C++編譯器不需要區(qū)分子類或者父類對象,只需要在pa指針中,找到vptr指針即可。

如果對象類型是子類,就調(diào)用子類的函數(shù);如果對象類型是父類,就調(diào)用父類的函數(shù),(即指向父類調(diào)父類,指向子類調(diào)子類)此為多態(tài)的表現(xiàn)。

既然類里面有vptr指針,那么我們能找到它嗎?

咱們一起來探究下:首先看下加了虛函數(shù)的類的大小有沒有變化。

圖片

可以看到加了虛函數(shù),類的大小比沒有增加虛函數(shù)的類,多了四個字節(jié)的空間,有的同學可能會說,四個字節(jié)的類型不一定是指針。不要著急,讓我們繼續(xù)往下看。

接下來我們定義對象,然后通過調(diào)試,看下局部變量窗口

圖片

從這里就可以明確看到,子類對象中有一個vptr指針,而且它是對象的第一個成員,它的類型是void**,指向的是一個順序表,下標為0的元素裝的是我們聲明的虛函數(shù)。

那么,知道了這些,咱們能利用對象找到虛函數(shù)表,然后自己手動調(diào)用虛函數(shù)嗎?

你們:肯定可以啊,廢話

我:。。。那就廢話不多說,歐力給!搞起

我:首先畫一張內(nèi)存模型圖,瞅瞅(畫工太丑,見諒)

圖片

1,首先,要拿到vptr指針,怎么拿呢?因為它在對象的第一個元素,所以我們先對對象取地址&ch,這樣就拿到了對象的地址。對象的元素的內(nèi)存是連續(xù)的,但是現(xiàn)在指針的步長是Child類的大小,我們需要把它當成一個整型數(shù)組(因為vptr是四個字節(jié)),所以需要強轉(zhuǎn)成int*,即(int*)&ch,這樣之后數(shù)組第一個元素就是vptr指針了,取值即可得到

(int )&ch

2,然后,前面通過調(diào)試我們知道了,vptr指針是void**類型的,所以我們也要講它轉(zhuǎn)為int*,然后取值. (int )( (int )&ch),這樣就拿到了虛函數(shù)表的第一個元素。

3,但是,現(xiàn)在拿到的元素是int*型,不是函數(shù)指針,無法調(diào)用,所以我們需要強轉(zhuǎn)為函數(shù)指針,才能進行調(diào)用。

圖片

你學廢了沒?嘿嘿

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 指針
    +關注

    關注

    1

    文章

    484

    瀏覽量

    71077
  • 對象
    +關注

    關注

    1

    文章

    38

    瀏覽量

    17527
  • 函數(shù)調(diào)用

    關注

    0

    文章

    19

    瀏覽量

    2656
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    C++的多態(tài)詳解

    在編程語言和類型論中,多態(tài)(英語:polymorphism)指為不同數(shù)據(jù)類型的實體提供統(tǒng)一的接口。多態(tài)類型(英語:polymorphic type)可以將自身所支持的操作套用到其它類型的值上。
    發(fā)表于 09-20 17:18 ?783次閱讀

    多態(tài)VI例子

    多態(tài)VI例子,希望大家喜歡
    發(fā)表于 06-26 17:16

    【資料】多態(tài)子VI

    多態(tài)子VI,剛看到的,分享給大家,希望對新學者有幫助。。。。。。
    發(fā)表于 12-11 13:50

    多態(tài)子VI已斷開,運行該VI前必須解決多態(tài)子VI的所有錯誤。

    多態(tài)子VI已斷開,運行該VI前必須解決多態(tài)子VI的所有錯誤。外部連接了USB-4711的采集卡,等有正常顯示;
    發(fā)表于 01-14 20:35

    請問多態(tài)的必要條件是什么?

    什么是多態(tài)多態(tài)的必要條件是什么?
    發(fā)表于 11-06 06:22

    如何完備地實現(xiàn)C++多態(tài)性?

    如何完備地實現(xiàn)C++多態(tài)性?虛函數(shù)怎么使用?
    發(fā)表于 04-28 06:44

    LabVIEW多態(tài) VI (Polymorphic VIs)的使用

    LabVIEW多態(tài) VI (Polymorphic VIs)的使用多態(tài) VI (Polymorphic VIs) 是什么,什么時候可以使用它們?解答:多態(tài) VI 最早是在 LabVIEW 6.0 被
    發(fā)表于 05-10 21:04

    基于Java多態(tài)性的應用程序設計

    Java 中的多態(tài)體現(xiàn)在類的繼承和實現(xiàn)接口等方面。通過對與多態(tài)有關的概念進行歸納比較,從繼承和接口兩方面對多態(tài)的正確實現(xiàn)進行分析,結合實例說明多態(tài)性在程序設計中的
    發(fā)表于 09-09 08:51 ?24次下載

    什么是方法的重載(多態(tài)性)?

    什么是方法的重載(多態(tài)性)? 在同一個類中至少有兩個方法用同一個名字,但有不同的參數(shù)。
    發(fā)表于 04-28 14:28 ?1325次閱讀
    什么是方法的重載(<b class='flag-5'>多態(tài)</b>性)?

    C++的動態(tài)多態(tài)和靜態(tài)多態(tài)

    多態(tài)是 C++ 中面向?qū)ο蠹夹g的核心機制之一包含靜態(tài)多態(tài)和動態(tài)多態(tài)它們之間有一定的相似性但是應用范圍不同該文論述了這種相似性并重點論述了以模板實現(xiàn)的靜態(tài)多態(tài)的應用范圍
    發(fā)表于 06-29 15:41 ?41次下載
    C++的動態(tài)<b class='flag-5'>多態(tài)</b>和靜態(tài)<b class='flag-5'>多態(tài)</b>

    java多態(tài)性的實現(xiàn)

    Java中多態(tài)性的實現(xiàn) 什么是多態(tài) 面向?qū)ο蟮娜筇匦裕悍庋b、繼承、多態(tài)。從一定角度來看,封裝和繼承幾乎都是為多態(tài)而準備的。這是我們最后一個概念,也是最重要的知識點。
    發(fā)表于 09-27 10:36 ?9次下載

    多態(tài)路由機制研究

    如何基于有限且確定的路由結構來支持多樣化服務是當前研究面臨的問題,采用路由結構的自組織和自調(diào)節(jié)來實現(xiàn)路由與業(yè)務的自適配,提出一種面向多樣化服務定制的多態(tài)路由機制。該機制通過自適配網(wǎng)絡路由結構的基本微
    發(fā)表于 03-13 16:43 ?2次下載
    <b class='flag-5'>多態(tài)</b>路由機制研究

    JAVA教程之消息、繼承與多態(tài)的應用和資料介紹說明

    本文檔的主要內(nèi)容詳細介紹的是JAVA教程之消息、繼承與多態(tài)的應用和資料介紹說明主要內(nèi)容包括了:1 消息,2 訪問控制,3 多態(tài)機制 ,4 繼承機制,5 抽象類、接口與包
    發(fā)表于 01-16 11:02 ?0次下載
    JAVA教程之消息、繼承與<b class='flag-5'>多態(tài)</b>的應用和資料介紹說明

    Java中的多態(tài)有哪些表現(xiàn)形式

    學習Java語言的過程中,對于多態(tài)的理解是非常關鍵的,理解了多態(tài)也就意味著打開了理解Java各種“抽象”的大門。
    發(fā)表于 09-10 15:50 ?2087次閱讀

    java的封裝繼承和多態(tài)

    繼承是為了重用父類代碼。兩個類若存在IS-A的關系就可以使用繼承。,同時繼承也為實現(xiàn)多態(tài)做了鋪墊。那么什么是多態(tài)呢?多態(tài)的實現(xiàn)機制又是什么?請看我一一為你揭開:
    發(fā)表于 10-15 10:05 ?1548次閱讀
    java的封裝繼承和<b class='flag-5'>多態(tài)</b>
    主站蜘蛛池模板: 沙洋县| 建水县| 临高县| 花莲县| 鲁甸县| 达拉特旗| 平陆县| 石河子市| 绥滨县| 肥乡县| 晋江市| 新化县| 门头沟区| 兴城市| 岳阳市| 报价| 太保市| 娱乐| 和田市| 化隆| 玉龙| 安国市| 兴安盟| 古交市| 仪征市| 绿春县| 石家庄市| 呼玛县| 木兰县| 巴彦县| 陈巴尔虎旗| 北票市| 鹤庆县| 辉县市| 浦江县| 乌拉特中旗| 普定县| 邵武市| 乐东| 大渡口区| 札达县|