-2

该功能的要求如下:

“一个加法运算符,它接收对两个不可修改的 Point 对象的引用并返回一个 Point 对象,该对象包含两个对象坐标相加的结果”

我的观点.h

#ifndef _POINT_H_
#define _POINT_H_
#include "Showable.h"
#include <iostream>
using namespace std;

class Point : public Showable {

public:

int x;
int y;

Point();
Point(int a, int b);
ostream& display(ostream& os) const;
friend Point& operator+(const Point& pointA, const Point& pointB);
friend Point& operator/(const Point& pointA, int b);


};

#endif

我的功能是

Point& operator+(const Point& pointA, const Point& pointB) {

Point a; 


}

我想做的是,创建一个新的 Point 对象,并添加 pointA 和 pointB 的值,然后返回新的 Point 对象,但它不允许我创建一个新对象,因为它是一个抽象类。我能做些什么?

错误是“不允许抽象类类型“点”的对象。

编辑:我的 Showable.h

#ifndef _SHOWABLE_H_
#define _SHOWABLE_H_
#include <iostream>
using namespace std;

class Showable { 

public:

virtual ostream& display(ostream& os) const = 0;
virtual istream& operator>>(istream& is) const = 0;

};

#endif
4

3 回答 3

3

可能不相关,但您需要按值返回:

Point  operator+(const Point& pointA, const Point& pointB) {
//   ^ no & here
  Point a; 
  // ...
  return a;
}

解决抽象类的问题:看Showable. 它确实有一个纯虚方法(带有 的方法=0),你需要在你的类中实现它Point


在你展示之后Showable.h:理论上你现在需要实现

virtual istream& operator>>(istream& is) const;

对于 class Point,但这很奇怪,原因有以下三个: 该方法已标记const,因此无法修改Point,因此无法将值读入其中。签名也很不寻常,这意味着你会使用my_point >> is;- 无论是什么意思。最后:如果抽象基类被调用Showable,为什么它有输入值的方法?我认为您可能需要重新考虑是否Showable应该有这个operator>>,或者是否应该将它移到其他地方。

于 2013-10-29T22:45:07.187 回答
0
  1. 您应该在类 Point 中定义基类 Showable 的所有纯虚函数。
  2. 定义运算符如下

    常量点运算符 +( 常量点 &a, 常量点 &b ) { return ( 点( ax + bx, ay + by ); }

于 2013-10-29T22:52:00.277 回答
0

您必须实现所有抽象的 Showable 类成员。为此 1) 将 virtual 关键字添加到 display() 方法 2) 实现 istream& 运算符>>

此外,您应该按值返回 Point,而不是从 + 运算符中引用。

于 2013-10-29T22:53:47.843 回答