C 虛函式 物件 類對應的位址

2021-08-04 03:30:03 字數 1116 閱讀 4478

在c++中的多型中,我們通過位址的訪問來尋找虛函式、物件、類的位址。具體看**實現

#include "stdafx.h"

#include

using

namespace

std;

class a ;

virtual

void f()

int i;

};class b : public a

virtual

void f() ;

int main()

//同乙個類的虛函式的首位址相同(注意是類)

if (p == q) //物件a和物件b的位址不同(這裡是物件)

int* x = (int*)*p; //我們再定義乙個指標x指向p所指那個物件所指向的地方(這裡其實就是指向虛函式表,也就是*p和*q所指的地方)

cout

<

cout

<< "x = "

/這裡輸出的x是16進製制的,轉換為10進製的值應該和*p與*q都相等

cout

<< *p << endl << *q << endl;

cout

<< p << endl << q << endl; //p和q指向的物件不同,故值也不同

return

0;}

為了更加直觀的通過指標來訪問虛函式,通過下面**段來說明

#include 

using

namespace

std;

class base

virtual

void g()

virtual

void h()

};typedef

void(*fun)(void);

int main()

指標訪問如圖所示

當我們定義乙個class1 a的物件的時候,a的首位址&a指向vptr,而vptr是乙個指標,指向虛函式表的首位址。

總結 :

C 虛函式 虛函式表位址

總結自 編譯器 vs2017 一 虛函式 當我們使用基類的引用或者指標呼叫乙個虛成員函式時會執行動態繫結,直到執行時才知道到底呼叫了哪個版本的虛函式,被呼叫的函式是與繫結到指標或者引用上的物件的動態型別相匹配的那乙個。所有虛函式都必須有定義。虛函式的作用主要是實現多型機制。using namespa...

c 虛函式位址的獲取

最近在做的乙個專案的乙個步驟找到虛函式的實際位址。這個過程中遇到的問題,讓我感覺到了自己對於c 指標的理解還是不夠透徹,記錄一下。指標賦值 根據作業系統的位數定義指標的大小 ifdef 32 代表是32位作業系統 typedef unsigned int pointer size else type...

虛函式指標和它對應的虛函式表

虛函式指標,又稱虛函式表指標,當類中存在虛函式時,就會存在虛函式指標,它用來指向虛函式表,而虛函式表中則存了虛函式的位址 虛函式表的長度等於虛函式的個數 舉個例子 class test public virtual void virfun1 virtual void virfun2 int n1 i...