【问题标题】:C++ Pass inherited class to function expecting base classC ++将继承的类传递给期望基类的函数
【发布时间】:2014-04-28 16:01:20
【问题描述】:

我有一个类“D”,它有一个成员函数“play”。 Play 应该有两个参数,都是“A”类的对象。我还有另外两个类,“B”和“C”,它们都是从“A”类继承(保护)的。我的程序的结构方式,我只有一个'B'对象和另一个'C'对象传递给函数'play'。我怎样才能使这项工作?如果我传递这两个继承的对象,我会得到一个编译器错误:

cannot cast 'B' to its protected base class 'A'

我是否需要将对象转换回“A”对象才能将它们传递给“播放”?或者我可以按原样使用它们吗?

【问题讨论】:

  • 为什么要建立继承关系protected?你知道privateprotectedpublic继承的区别吗?我相信,如果你这样做了,那么你就不会问这个问题了,所以我建议你看看这个帖子:stackoverflow.com/questions/860339/…

标签: c++ object inheritance protected


【解决方案1】:

如果我正确解释了您的代码并且您的情况是the following

struct A {};
struct B : protected A {};
struct C : protected A {};
struct D {
    void play(A a, A b) {}
};

那么您应该在play 成员函数中公开继承并接受const 引用(或references),例如this

struct A {};
struct B : public A {};
struct C : public A {};
struct D {
    void play(A const& a, A const& b) {}
};

【讨论】:

    【解决方案2】:

    您可以通过引用传递class Bclass C 的对象。 例如:void play(A* b,A* c);

    由于BCA 的孩子,A 的指针可以持有该对象。但是你需要在Class A里面的Class D中声明BC的所有函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多