此功能的要求如下:
“一个加法运算符,它接收对两个不可修改的Point对象的引用,并返回一个Point对象,该对象保存添加两个对象坐标的结果”
My 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
答案 0 :(得分: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;
用于类Point
,但由于三个原因,这很奇怪:该方法标记为const
,因此无法修改Point
,因此无法将值读入其中。此外,签名非常不寻常,这意味着您将使用my_point >> is;
- 无论这意味着什么。最后:如果抽象基类被称为Showable
,为什么它有一个输入值的方法?我想你可能想重新考虑Showable
是否应该有operator>>
或者是否应该将其移到其他地方。
答案 1 :(得分:0)
按以下方式定义运算符
const Point运算符+(const Point&amp; a,const Point&amp; b) { return(Point(a.x + b.x,a.y + b.y); }
答案 2 :(得分:0)
您必须实现所有抽象的Showable类成员。去做这个 1)将virtual关键字添加到display()方法中 2)实现istream&amp;运营商GT;&GT;
此外,您应该返回Point by值而不是+运算符的引用。