C++ 如何重载运算符+;在抽象超类的子类中?

C++ 如何重载运算符+;在抽象超类的子类中?,c++,pointers,inheritance,operator-overloading,enumerator,C++,Pointers,Inheritance,Operator Overloading,Enumerator,因此,我正在对继承和抽象类进行修补。在我正在编程的实例中,我创建了一个指向Shape的指针数组,Shape是我的抽象基类。在用正方形子类指针填充数组中的前两个点之后,我用前两个指针的总和填充第三个点。这给了我一个“表达式必须具有整数或非范围枚举类型”错误,这给了我一些麻烦。此外,它给了我一个错误“'+'不能添加两个指针。” 有什么想法吗?无法尝试编译代码,因为类定义不可用。 乍一看,这行代码看起来不正确 shapes[2] = shapes[0] + shapes[1]; shape[2]是指

因此,我正在对继承和抽象类进行修补。在我正在编程的实例中,我创建了一个指向Shape的指针数组,Shape是我的抽象基类。在用正方形子类指针填充数组中的前两个点之后,我用前两个指针的总和填充第三个点。这给了我一个“表达式必须具有整数或非范围枚举类型”错误,这给了我一些麻烦。此外,它给了我一个错误“'+'不能添加两个指针。”


有什么想法吗?

无法尝试编译代码,因为类定义不可用。 乍一看,这行代码看起来不正确

shapes[2] = shapes[0] + shapes[1];
shape[2]
是指向shape的指针,但您尚未为堆外的索引创建
shape
的实例。因此,类似这样的东西可能会解决您的问题,但是我再次无法测试它,因为类定义在原始文章中不可用

shapes[2] = new Square();
*shapes[2] = *shapes[0] + *shapes[1];

当您简单地将第三个索引设置为第二个索引时,关于您的实现工作;这可能是因为听起来您正在将第三个索引设置为指向第二个索引所指向的同一地址。如果是,这是有效的,因为它们只是地址

If(this!=&c1)
——为什么这个测试在
操作符+=
中?这
a+=a应该是完全有效的。此外,它给了我一个错误“'+'不能添加两个指针。”--解释这行的作用:
shapes[2]=shapes[0]+shapes[1]
看起来您的
操作符+=
与您的
操作符=
完全相同。这是有意的吗?
shapes[2] = shapes[0] + shapes[1];
shapes[2] = new Square();
*shapes[2] = *shapes[0] + *shapes[1];