c运算符重载的多态性
作者:互联网
如何使纯虚函数成为operator();功能.
在基类中这样做
int operator()= 0;
编译器给出错误.
在derive类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;
}
解决方法:
你模糊的代码提到基本上是不可能的.回答你的问题“如何使纯虚函数成为一个运算符();函数”,这绝对没有秘密,例如考虑以下琐碎的计划:
#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基础调用它& – 注意其他答案也省略了这个const;并且,每个注释也是如此):
如果你想能够做到15 b,只需为此目的添加一个独立的功能,比如在main之前:
inline int operator+(int i, const base&b) {
return b + i;
}
标签:c,operator-overloading,polymorphism,abstract-class 来源: https://codeday.me/bug/20191007/1869647.html