使用扩展类声明方法

foo*_*You 0 c++ syntax function-prototypes

关于声明功能的快速问题.可以说我有以下代码:

class a{
    int var;
    /* stuff*/
}

class b : a{
    /* other stuff*/
}

class c : a{
    /* more other stuff*/
}

class d{
    myFunctionThatWantsTheIntNamedVar(SubClassOfClassA SomeClassUnknownAtCompileTime);
}
Run Code Online (Sandbox Code Playgroud)

和myFunctionThatWantsTheIntNamedVar()只需要,在a的基类中声明的整数(称为var).类d中的函数可以传递给类b或类c的实例,这在编译时是未知的(仅在运行时).

有没有办法我可以简明地声明一个函数,可以采用类b或c并获得相同的基本变量?

我在同一时间所做的是在d类中声明两个方法,如下所示:

class d{
    myFunctionThatWantsTheIntNamedVar(c aClassCInstance);
    myFunctionThatWantsTheIntNamedVar(b aClassBInstance);
}
Run Code Online (Sandbox Code Playgroud)

这很好,但两个方法中的代码都是IDENTICAL ......从我对面向对象编程的理解,如果代码相同,你应该能够将它组合成一个更好的函数.

有什么想法吗?只是在这里寻找最佳实践或其他建议,因为我在一家小公司工作并获得反馈有时很难.

编辑:对不起,我的代码中有错误,改为:

myfunctionThatWantsTheInNamedVar(a aClassAInstance);
Run Code Online (Sandbox Code Playgroud)

至:

myfunctionThatWantsTheInNamedVar(c aClassCInstance);
Run Code Online (Sandbox Code Playgroud)

我的错.

jua*_*nza 6

提供一个公共访问器方法,该方法可以访问变量,并确保不在类b和类c中隐藏其名称.

class a{
    int var;
    /* stuff*/
 public:
  const int& getVar() const { return var; }
  int& getVar() { return var; }
};
Run Code Online (Sandbox Code Playgroud)

然后参考aoyur函数:

class d{
 public:  // you probably want a public member function
    myFunctionThatWantsTheIntNamedVar(const a& theA) {
      int n = theA.getVar();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用bc实例调用它:

b b0;
c c0;
d d0;
d0.myFunctionThatWantsTheIntNamedVar(b0);
d0.myFunctionThatWantsTheIntNamedVar(c0);
Run Code Online (Sandbox Code Playgroud)

请记住,在您的代码中,变量var是私有的,以及类b和中的inhereance c.为此,您需要将继承公开:

class b : public a { .... };
class c : public a { .... };
Run Code Online (Sandbox Code Playgroud)