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

C++關(guān)于指針,繼承和多態(tài)介紹

 更新時(shí)間:2022年01月07日 08:57:54   作者:山頂?shù)男〉朗? 
大家好,本篇文章主要講的是C++關(guān)于指針,繼承和多態(tài)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽

指針

我們?cè)跁?shū)本上學(xué)到的指針基本上都是:首先,指針是一個(gè)變量;其次,這個(gè)變量存儲(chǔ)的值是一個(gè)地址。這個(gè)是對(duì)指針的一個(gè)基本理解,最近在編程中發(fā)現(xiàn)了一些新的東西。

首先,指針不僅僅是一個(gè)地址,還存在一個(gè)和所指向內(nèi)容大小相關(guān)的值,如下代碼:

#include<iostream>

using namespace std;

int main()
{
    int a = 10;
    int *pa = &a;
    cout << "pa: " << pa << endl;
    cout << "pa+1: " << pa + 1 << endl;

    short b = 1;
    short *pb = &b;
    cout << "pb: " << pb << endl;
    cout << "pb+1: " << pb + 1 << endl;

    void *ppa = &a;
    cout << "ppa:" << ppa << endl;
    cout << "ppa+1: " << ppa + 1 << endl;

    return 0;
}

在這里插入圖片描述

從運(yùn)行結(jié)果可以看出pa+1,地址增加了4個(gè)字節(jié);pb+1,地址增加了2個(gè)字節(jié);ppa+1,地址增加了2個(gè)字節(jié);而使用void指針指向整型變量a,此時(shí)ppa+1,地址只增加了1個(gè)自己。從這個(gè)結(jié)果我們可以很明顯看出,指針不僅僅是一個(gè)存地址的變量,還存在一個(gè)和內(nèi)存分配相關(guān)的值。其實(shí)進(jìn)一步說(shuō),指針不僅僅是一個(gè)地址值,還存放著如何解釋內(nèi)存的規(guī)則。(void指針只存放地址,沒(méi)有解釋規(guī)則)

指針和繼承

眾所周知,繼承可以實(shí)現(xiàn)用父類的指針來(lái)指向子類的對(duì)象,為什么可以這樣用呢?正如上面所說(shuō),指針保存地址和解釋內(nèi)存的規(guī)則,當(dāng)你聲明一個(gè)父類指針,那么你就指明了該指針的解釋規(guī)則,當(dāng)你將子類地址傳給指針時(shí),你就相當(dāng)于給了一塊內(nèi)存給這個(gè)指針,然后這個(gè)指針就可以用它的規(guī)則去解釋這塊內(nèi)存。根據(jù)上面的說(shuō)法,那么我們可以得出,子類對(duì)象中必定存在一塊內(nèi)存,其分配方式和父類對(duì)象一模一樣(如果把這塊內(nèi)存單獨(dú)提取出來(lái),它就是一個(gè)父類對(duì)象),事實(shí)也是如此,而且這塊“父類對(duì)象”一般都是存放在子類對(duì)象的最前面,這就解釋了子類在構(gòu)造的時(shí)候,一定會(huì)先調(diào)用父類構(gòu)造函數(shù)。同時(shí),“父類對(duì)象”指針只能訪問(wèn)自己的父類成員。那么考慮多繼承的情況,多繼承的子類,其內(nèi)存空間中必定存在多個(gè)“父類對(duì)象”空間,這些父類空間的地址必定是不同的,那么就會(huì)造成同一個(gè)多繼承的子類,用其不同的父類指針指向它,其地址值是不同的,實(shí)際測(cè)試的確如此:

#include<iostream>
using namespace std;
class A
{
    public:
        int a = 10;
        long int aa = 100;
};

class B 
{
    public:
        int b = 20;

};

class C : public A, public B
{
    public:
        int c = 30;
};

int main()
{
    C c;
    A *pA;
    B *pB;
    C *pC;

    pA = &c;
    pB = &c;
    pC = &c;

    cout << "pA: " << pA << endl;
    cout << "pB: " << pB << endl;
    cout << "pC: " << pC << endl;
    cout << "pA.a: " << &(pA->a) << endl;
    cout << "pA.aa: " << &(pA->aa) << endl;
    cout << "pB.b: " << &(pB->b) << endl;
    cout << "pC.c: " << &(pC->c) << endl;

    return 0;
}

在這里插入圖片描述

在這里插入圖片描述

其內(nèi)存布局如圖,pA、pB都指向各自的“父類對(duì)象”空間起始位置,pA只能訪問(wèn)a、aa,pB只能訪問(wèn)b(至于為什么a是int卻占8個(gè)字節(jié),這個(gè)和內(nèi)存對(duì)齊有關(guān),自行查詢)。

指針、繼承和多態(tài)

C++的繼承和多態(tài)繞不過(guò)的一個(gè)東西便是虛指針和虛函數(shù),這里簡(jiǎn)單說(shuō)一下:首先,在含有虛函數(shù)的類中,會(huì)產(chǎn)生一個(gè)虛函數(shù)表,注意這個(gè)虛函數(shù)表是從屬于類的,不是從屬于對(duì)象,也就是多個(gè)對(duì)象共享這個(gè)虛函數(shù)表。其次,每個(gè)類聲明的對(duì)象都會(huì)有一個(gè)虛指針,這個(gè)虛指針指向類的虛函數(shù)表。(這里只是簡(jiǎn)單提及一下,更多的東西可以自行查詢)看過(guò)很多網(wǎng)上的東西,都說(shuō)虛指針是每個(gè)對(duì)象的第一個(gè)數(shù)據(jù)成員,也就是分配在最開(kāi)頭的地址空間。其實(shí),我覺(jué)得這句話不完全正確,因?yàn)楫?dāng)多繼承中有虛函數(shù)時(shí),虛函數(shù)表就有多個(gè),虛指針也有多個(gè),這些虛指針不一定全都存在于最開(kāi)始的地址空間。應(yīng)該說(shuō),這些虛指針存在于繼承的父類所管理區(qū)域的開(kāi)頭:

#include<iostream>
using namespace std;
class A
{
    public:
        int a = 10;
        long int aa = 10;
        virtual void f()
        {

        }
};

class B 
{
    public:
        int b = 20;
        virtual void g()
        {

        }
};

class C : public A, public B
{
    public:
        int c = 30;
        virtual void cc()
        {

        }
};

int main()
{
    A *pA;
    B *pB;
    C c;
    pA = &c;
    pB = &c;
    cout << pA << endl;
    cout << &(pA->a) << endl;
    cout << &(pA->aa) << endl;
    cout << pB << endl;
    cout << &(pB->b) << endl;
    cout << &(c.c) << endl;

    return 0;
}

在這里插入圖片描述

在這里插入圖片描述

從上面的結(jié)果可以看出,虛指針不一定都是存在最開(kāi)始的位置,如果硬要說(shuō)是開(kāi)始,應(yīng)該也是相對(duì)于“父類對(duì)象”區(qū)域的開(kāi)始。

到此這篇關(guān)于C++關(guān)于指針,繼承和多態(tài)介紹的文章就介紹到這了,更多相關(guān)C++指針 繼承 多態(tài)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例

    C語(yǔ)言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例

    這篇文章主要介紹了C語(yǔ)言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能,結(jié)合具體實(shí)例形式分析了C語(yǔ)言棧和隊(duì)列的定義及使用棧和隊(duì)列進(jìn)行回文檢測(cè)的操作技巧,需要的朋友可以參考下
    2017-06-06
  • Cocos2d-x UI開(kāi)發(fā)之CCControlPotentiometer控件類使用實(shí)例

    Cocos2d-x UI開(kāi)發(fā)之CCControlPotentiometer控件類使用實(shí)例

    這篇文章主要介紹了Cocos2d-x UI開(kāi)發(fā)之CCControlPotentiometer控件類使用實(shí)例,本文代碼中包含注釋來(lái)講解CCControlPotentiometer控件類的使用,需要的朋友可以參考下
    2014-09-09
  • C++如何使用new來(lái)初始化指向類的指針

    C++如何使用new來(lái)初始化指向類的指針

    這篇文章主要介紹了C++如何使用new來(lái)初始化指向類的指針問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vscode實(shí)現(xiàn)本地代碼自動(dòng)同步到遠(yuǎn)程機(jī)器的步驟

    vscode實(shí)現(xiàn)本地代碼自動(dòng)同步到遠(yuǎn)程機(jī)器的步驟

    這篇文章主要介紹了vscode實(shí)現(xiàn)本地代碼自動(dòng)同步到遠(yuǎn)程機(jī)器的步驟,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • C++中抽象類和接口的區(qū)別介紹

    C++中抽象類和接口的區(qū)別介紹

    抽象類(abstract class)和接口(interface)的概念是面向?qū)ο笤O(shè)計(jì)中常用的概念, 也是比較容易混淆的概念. 在這里, 我提出一種區(qū)分它們的思路
    2013-04-04
  • Windows網(wǎng)絡(luò)編程之winsock實(shí)現(xiàn)文件傳輸示例

    Windows網(wǎng)絡(luò)編程之winsock實(shí)現(xiàn)文件傳輸示例

    這篇文章主要介紹了Windows網(wǎng)絡(luò)編程之winsock實(shí)現(xiàn)文件傳輸示例,對(duì)于學(xué)習(xí)Windows網(wǎng)絡(luò)程序設(shè)計(jì)來(lái)說(shuō)具有很好的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • 詳解C語(yǔ)言中的wait()函數(shù)和waitpid()函數(shù)

    詳解C語(yǔ)言中的wait()函數(shù)和waitpid()函數(shù)

    這篇文章主要介紹了C語(yǔ)言中的wait()函數(shù)和waitpid()函數(shù),注意其在中斷進(jìn)程方面用法的不同,需要的朋友可以參考下
    2015-08-08
  • 詳談浮點(diǎn)精度(float、double)運(yùn)算不精確的原因

    詳談浮點(diǎn)精度(float、double)運(yùn)算不精確的原因

    這篇文章主要介紹了詳談浮點(diǎn)精度(float、double)運(yùn)算不精確的原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • C語(yǔ)言對(duì)于volatile與gcc優(yōu)化的探究

    C語(yǔ)言對(duì)于volatile與gcc優(yōu)化的探究

    這篇文章主要介紹了C語(yǔ)言對(duì)于volatile與gcc優(yōu)化的探究,volatile是一個(gè)特征修飾符(type specifier) volatile的作用是作為指令關(guān)鍵字,確保本條指令不會(huì)因編譯器的優(yōu)化而省略,且要求每次直接讀值。這是百度百科的介紹,那編譯器是具體是怎么優(yōu)化的呢
    2023-02-02
  • c語(yǔ)言/c++溢出問(wèn)題淺談

    c語(yǔ)言/c++溢出問(wèn)題淺談

    這篇文章主要給大家介紹了關(guān)于c語(yǔ)言/c++溢出問(wèn)題的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評(píng)論