Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;指向成员函数的函数指针-它接收哪个地址?_C++_Function Pointers - Fatal编程技术网

C++ C++;指向成员函数的函数指针-它接收哪个地址?

C++ C++;指向成员函数的函数指针-它接收哪个地址?,c++,function-pointers,C++,Function Pointers,假设我有这门课: class Shape { public: int value; Shape(int v) : value(v) {}; void draw() { cout << "Drawn the element with id: " << value << endl; } }; 我有一个drawpntr函数指针,指向返回类Shape的0参数函数成员的void 我想问的第一件事是: draw

假设我有这门课:

class Shape
{
public:
    int value;

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

    void draw()
    {
        cout << "Drawn the element with id: " << value << endl;
    }
};
我有一个drawpntr函数指针,指向返回类Shape的0参数函数成员的void

我想问的第一件事是:

drawpntr = &Shape::draw;
函数是一个成员函数,这里没有对象。。pntr收到什么地址?这个类甚至不应该存在

我同意这句话

(myShapeObject->*drawpntr)();
因为我知道我不能反引用指向成员函数的函数指针(无对象->无函数),但drawpntr中实际存储了什么地址??没有物体当

drawpntr = &Shape::draw;

行被调用。。类也不应该作为一个实体存在

所有成员函数共享相同的代码,因此它们在内存的代码段中具有相同的地址。成员函数只能在不同的实例上操作,因为它们被隐式传递给
指针的不同值。它们与它们操作的任何实例都没有任何联系。如果函数为非虚拟函数,则可以静态确定
drawpntr
的实际值;如果函数为虚拟函数,则可以动态(通过)确定
drawpntr的实际值

drawpntr = &Shape::draw;