我想将超载运算符添加到派生类中
I want to add overloaded operators to a derived class
c
我一直在努力学习Inheritance
和Polymorphism
数周。我可以和狗和猫一起哺乳动物,o可以从狗那里衍生出幼犬,什么不是。我有 a + operator
的 naughtlenum base class
, derived class
是naughty1。(对不起,但是我讨厌foo bar(
这是代码:
#include <iostream>
#include <math.h>
using namespace std;
typedef unsigned char UCHAR;
typedef unsigned short int SHORT;
class NaughtleNum;
class Naughty1;
class NaughtleNum {
public:
NaughtleNum() {
cout << "Hello NaughtleNum 1n";
}; //constructors
virtual~NaughtleNum() {
cout << "Bye Bye NaughtleNumn";
}; //destructor
virtual NaughtleNum * operator + (NaughtleNum * ) = 0;
};
class Naughty1: public NaughtleNum {
public:
Naughty1() {
cout << "Hello Naughty1n";
value = 3;
}; //constructors
~Naughty1() {
cout << "Bye Bye Naughty1n";
}; //destructor
Naughty1 * operator + (Naughty1 * ) {}
private:
UCHAR value;
};
int main() {
cout << "I am Heren";
NaughtleNum * N1;
N1 = new Naughty1;
return 0;
}
我想拥有两个调皮数字的a + operator
!
消息是:
daddio@LittleBeast:~/Programs/MyLib/Naughty> g++ -g -o NaughtleNum NaughtleNum.cpp
NaughtleNum.cpp: In function ‘int main()’:
NaughtleNum.cpp:35:12: error: cannot allocate an object of abstract type ‘Naughty1’
N1=new Naughty1;
^
NaughtleNum.cpp:19:7: note: because the following virtual functions are pure within ‘Naughty1’:
class Naughty1: public NaughtleNum
^
NaughtleNum.cpp:16:30: note: virtual NaughtleNum* NaughtleNum::operator+(NaughtleNum*)
virtual NaughtleNum* operator + (NaughtleNum*) =0;
^
daddio@LittleBeast:~/Programs/MyLib/Naughty>
我在这里缺少什么?
您获得抽象类错误的原因是因为您还没有覆盖基类的二进制添加操作员!如果您在基类中有虚拟运算符,则派生的类必须具有相同的签名。
Naughty1 * operator + (Naughty1 * ) {}
是完全不同的,与:
100%不同virtual NaughtleNum * operator + (NaughtleNum * ) = 0;
但是,在您外出并更改签名之前,请考虑您是否真的需要操作员多态性。每个类都将拥有自己的独特二进制添加操作员,因此基类中的虚拟操作员无需。Naughty1
拥有一个会返回并接受Naughtlenum
的添加操作员没有意义,而是会接受并返回Naughty1
。
在旁注上,加法运算符应仅返回对象,而不是指向其指针。
相关文章:
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- 基类对象是否隐式添加到派生类中?
- 添加来自派生类的对象
- 在派生类中添加虚拟说明符
- 将 final 关键字添加到没有基类(未派生)的类中的虚函数是否有意义
- 我想将超载运算符添加到派生类中
- 是否可以在不手动在C 中的每个派生类中添加覆盖的克隆方法来克隆多态对象
- 当我在派生类中添加额外的虚拟功能时,什么是开销
- C - 派生的class Off std :: String类以添加额外的功能
- 从std:string派生以添加typedefs和enum
- 即使在派生和添加宏后也无法连接
- 将派生对象添加到(抽象的)基指针数组中
- 添加派生类会导致重影错误
- 重新编译二进制类或派生类,以便在基类中添加新方法
- 在C++中,是否允许强制转换为仅添加非虚拟方法的派生类
- 将派生类变量添加到向量<BaseClass>
- C++03:向多个派生类添加字段
- C++继承,将成员添加到派生类并重新定义构造函数