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

C:从父实例化中调用子方法

发布时间:2020-12-16 03:48:11 所属栏目:百科 来源:网络整理
导读:在我的代码中,我实现了这些类: class A{ public: virtual int fun() { return 0; }}class B : public A{ public: virtual int fun() { return 1; }} 而这些功能: void operation(A a){ printf("%dn",a.fun());}int main(){ B b; operation(b); return 0;}
在我的代码中,我实现了这些类:
class A
{
  public:
    virtual int fun() { return 0; }
}

class B : public A
{
  public:
    virtual int fun() { return 1; }
}

而这些功能:

void operation(A a)
{
  printf("%dn",a.fun());
}

int main()
{
  B b;
  operation(b);
  return 0;
}

如您所见,B类继承了A,并实现了虚拟继承方法fun().主类调用一个函数,该函数接受A in参数并调用fun()方法,并在参数中使用B对象.

在执行时,我希望打印字符串“1”,但它是“0”(即使它是传递给operation()的B对象).

我需要这样做,因为我有几个B类(B1,B2等…),我希望函数operation()是通用的.
我不需要在类A中实现operation(),但是如果我声明operation()是纯虚拟的,那么编译会在operation()失败,说我无法实例化A(这是非常期待的).

我发现很多话题都讨论了父/子方法调用和继承,但没有一个人准确地讨论过这个问题.

有人能帮我吗 ?

谢谢.

解决方法

您需要通过引用传递对象或传递指针
void operation(A& a)

因为您正在传递值,所以派生对象会被切片 – 在函数范围内创建一个类型为A的新对象.

(编辑:李大同)

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

    推荐文章
      热点阅读