gpt4 book ai didi

c++ - 不同的行为 : Calling Function Directly vs. 通过非静态成员指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:34:55 25 4
gpt4 key购买 nike

问题:

虽然我知道函数指针,但我不明白是什么让这两个函数在 Derived 类中表现不同:

I) StartPrintThroughFuncPtr()

II) StartPrint()

这是完整代码,加上注释中的它的输出:

#include "iostream"

class Base
{
(void)(Base::*callee)(void);
virtual void Print(){std::cout<<"Print: Base"<<std::endl;}

public:
void StartPrintThroughFuncPtr(){
callee = &Base::Print;
(this->*callee)();
}

void StartPrint(){
Base::Print();
}
};

class Derived : public Base
{
virtual void Print(){std::cout<<"Print: Derived"<<std::endl;}
};

void main()
{
Base *basePtr = new Base;
basePtr->StartPrintThroughFuncPtr(); // ==> "Print: Base"
basePtr->StartPrint(); // ==> "Print: Base"

Derived *derivedPtr = new Derived;
derivedPtr->StartPrintThroughFuncPtr(); // ==> "Print: Derived"
derivedPtr->StartPrint(); // ==> "Print: Base"
}

谢谢 =)

最佳答案

指向虚函数的指针实际上存储了虚函数表中的偏移量,而不是直接指向函数的指针。这就是为什么通过它进行的调用是虚拟的。

关于c++ - 不同的行为 : Calling Function Directly vs. 通过非静态成员指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25119928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com