簡體   English   中英

指向成員函數的C ++函數指針 - 它接收哪個地址?

[英]C++ function pointer to a member function - which address does it receive?

假設我有這門課:

class Shape
{
public:
    int value;

    Shape(int v) : value(v) {};

    void draw()
    {
        cout << "Drawn the element with id: " << value << endl;
    }
};

和以下代碼(有效)

    Shape *myShapeObject = new Shape(22);

    void (Shape::*drawpntr)();
    drawpntr = &Shape::draw;

    (myShapeObject ->*drawpntr)();

我有一個drawpntr函數指針指向類Shape的void-returns 0-arguments函數成員。

首先我想問一下:

drawpntr = &Shape::draw;

該函數是一個成員函數,這里沒有對象.. drawpntr接收什么地址? 這個班級甚至不應該存在

我同意這條線

(myShapeObject->*drawpntr)();

因為我明白我不能將函數指針解引用成員函數(沒有對象 - >沒有函數),但實際存儲在drawpntr中的地址是什么? 這個時候沒有任何對象

drawpntr = &Shape::draw;

line被調用..並且該類不應該作為實體存在

所有成員函數共享相同的代碼,因此它們在內存的代碼段中具有相同的地址。 成員函數僅在不同的實例上運行,因為它們隱式傳遞了this指針的不同值。 它們不以任何方式與它們運行的​​任何實例相關聯。 如果函數是非虛函數,則可以靜態確定drawpntr的實際值,如果函數是虛函數,則可以動態地(通過vtable )確定drawpntr的實際值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM