加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:53:37 所属栏目:百科 来源:网络整理
导读:有没有办法打印具有继承函数的派生类的类名而不覆盖派生类中的该函数? 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::p
有没有办法打印具有继承函数的派生类的类名而不覆盖派生类中的该函数?

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,所以我不能亲自担保它的有效性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读