gpt4 book ai didi

c++ - 使用继承函数打印派生类的类名

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:21:20 25 4
gpt4 key购买 nike

有没有什么方法可以在不覆盖派生类中的函数的情况下打印具有继承函数的派生类的类名?

class A {
public:
virtual void print() { printf("%s", __PRETTY_FUNCTION__); }
};

class B : public A {};

int main() {
B b;

b.print() // should yield "B::print()" but yields "A::print()"
}

我要求这样我就可以在重写的函数中调用 A::print() 来打印与父类相关的属性,但包括当前类名。

最佳答案

__PRETTY_FUNCTION__ 创建编译时确定的字符串。 A 不知道(而且,重要的是,不关心)是否有任何东西最终会派生自它。它只是创建一个打印出 "virtual void A::print()" 的函数。

如果您希望这样的函数能够正确识别调用它的类的名称,一种选择是将该名称维护为与基类关联的可查询对象。

class A {
public:
virtual void print() {printf("(%s) : %s", get_name(), __PRETTY_FUNCTION__);}
virtual const char * get_name() {return "A";}
};

class B : public A {
public:
virtual const char * get_name() {return "B";}
};

评论中关于使用 typeid 获取动态名称的建议可能也有效,但我从未以前使用过 typeid ,所以我个人不能保证它的有效性。

关于c++ - 使用继承函数打印派生类的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44033724/

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