gpt4 book ai didi

c++ - 调用派生的基类函数

转载 作者:可可西里 更新时间:2023-11-01 18:18:23 27 4
gpt4 key购买 nike

有什么方法可以从虚函数调用基类方法作为派生类,而不是作为基类?示例代码:

class A
{
public:
virtual void a() = 0;
void print() { std::cerr << typeid(decltype(*this)).name(); };
};

class B : public A
{
public:
virtual void a() { print(); }
};

int main()
{
B b;
b.a(); //prints 1A, I want it to print 1B, is it even possible?
}

最佳答案

只需删除decltype:

void print() { std::cerr << typeid(*this).name(); };

this 总是指向其成员函数所在类的一个实例。 A 中的 this 总是一个 A* 。所以 typeid(decltype(*this)) 总是给你 A

另一方面,typeid(*this) 将查找运行时类型信息,这将确定 this 确实是一个 B (因为 A 是多态类型)。

关于c++ - 调用派生的基类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39661874/

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