如何使纯虚函数成为operator +();功能。
我在基础课上喜欢这样
int运算符+()= 0;
编译器给出错误信息。
在派生类operator +()函数中
编译器说派生类无法制造。因为跟随类是抽象的
我知道我无法创建抽象类的对象,但是现在我尝试使派生类对象成为对象。

这是代码

#include <iostream>
using namespace std;
class ana {
    protected :
    int x;

    public :
    virtual int operator+()=0;
    virtual void operator=(ana&)=0;
    };

class baba : public ana{
    public:
    baba(int k){x=k;}
    int   operator+(baba &ali){
        int k;
        k=x+ali.x;
        return k;
    }
   void operator=(baba &ali){
       x=ali.x;
       }


    };

int main(){
    baba k(4);

    return 0;
    }

最佳答案

您对代码的含糊的提法基本上是不可能遵循的。回答您的问题“如何使纯虚函数成为operator +();函数”,对此绝对没有 secret 。考虑以下琐碎的程序:

#include <iostream>

class base {
public:
  virtual int operator+(int) const = 0;
};

class deriv: public base {
public:
  int operator+(int) const {return 23;}
};

int main() {
  deriv d;
  base& b = d;
  std::cout << b + 15 << std::endl;
  return 0;
}

这将编译并运行正常,并按预期方式发出23。无论您做错了什么,显然它必须与此有所不同(并且可能与纯虚拟操作符重载这一特定问题无关)。

编辑 :(根据注释,为在方法中添加const以防万一,您需要使用const base&来调用它-请注意,其他答案也省略了此const;并且,也根据注释):

如果您也想做15 + b,只需为此目的添加一个独立的函数,就在main之前说:
inline int operator+(int i, const base&b) {
    return b + i;
}

关于运算符重载的c++多态性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2969966/

10-09 06:34