繁体   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