c++ - 使用扩展类声明方法

标签 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);
}

而 myFunctionThatWantsTheIntNamedVar() 只想要那个,在 a 的基类中声明的整数(称为 var)。类 d 中的函数可能会传递一个类 b 或类 c 的实例,这在编译时是未知的(仅在运行时)。

有没有一种方法可以简洁地声明一个函数,该函数可以接受类 b 或 c 并获得相同的基变量?

我同时在类d中声明了两个方法,如下:

class d{
    myFunctionThatWantsTheIntNamedVar(c aClassCInstance);
    myFunctionThatWantsTheIntNamedVar(b aClassBInstance);
}

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

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

编辑:抱歉,我的代码有错误,将其更改为:

myfunctionThatWantsTheInNamedVar(a aClassAInstance);

到:

myfunctionThatWantsTheInNamedVar(c aClassCInstance);

我的错。

最佳答案

提供一个公共(public)访问器方法来访问变量,并确保您没有在类 b 和类 c 中隐藏它的名称。

class a{
    int var;
    /* stuff*/
 public:
  const int& getVar() const { return var; }
  int& getVar() { return var; }
};

然后在你的函数中引用一个a:

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

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

b b0;
c c0;
d d0;
d0.myFunctionThatWantsTheIntNamedVar(b0);
d0.myFunctionThatWantsTheIntNamedVar(c0);

请记住,在您的代码中,变量 var 是私有(private)的,类 bc 中的继承也是如此。为此,您需要公开继承:

class b : public a { .... };
class c : public a { .... };

关于c++ - 使用扩展类声明方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12432131/

相关文章:

python - 语法错误: keyword can't be an expression in django

c++ - 根据需求在 C++ 中定义函数原型(prototype)

c++ - 在不同的编译器上转换为void **

javascript - 有什么方法可以使 javascript 中的嵌套回调代码更具可读性吗?

java - 这种语法怎么可能

c - 将函数指针转换为 void 有什么影响?

javascript - 如何为 Array 属性创建短名称

c++ - 学习 C++ : error: use of deleted function

c++ - 为什么 WSARecvMsg 函数实现为一个函数指针,这个指针是否可以重用?

c++ - Boost signals2 自动连接管理和改变信号的互斥类型