我只有一个带有2个getter的接口类。 1返回一个' Point'的值。类。我有一个其他类使用接口类,所以他需要实现2个getter。就像我们在课堂上学到的一样,使用引用来节省存储和cpu更好。所以我试过,但是当我使用getPosition()(Point的getter)引用时,我的程序不起作用。这是我的代码。所以我的问题是。当我们这样做时,是否存在(基本的)规则,并且在c ++中不使用带有getter的引用。感谢
接口:IObject
#ifndef IOBJECT_H_
#define IOBJECT_H_
#include "Point.h"
class IObject {
public:
virtual Point getPosition() const =0;
virtual double getSize() const = 0;
};
#endif
班级:Square.h
#ifndef SQUARE_H_
#define SQUARE_H_
#include "IObject.h"
#include "Point.h"
#include <iostream>
class Square : public IObject {
private:
Point position;
double size;
protected:
virtual void print(std::ostream& out)const;
public:
Square(const Point& pos, const double size):position(pos), size(size){};
virtual double getSize() const {return this->size;}
virtual Point getPosition() const {return position;}
friend std::ostream& operator<<(std::ostream& out, const Square& s);
};
当我返回参考值时,这是我在Square类的getPosition中的错误。
&#34;此行有多个标记 - 实现IObject :: getPosition - 引用类型&#39; Point&#39;一个值类型&#39; const Point&#39;滴剂 限定符&#34;
错误说明了const。我检查了它,这使它更奇怪,因为没有关于const使用的错误。当我不使用引用时,我的程序运行正常。
谢谢
答案 0 :(得分:2)
根据错误,您尝试使const方法返回lvalue(非常量)引用,从而导致错误。只需让它返回const引用:
virtual const Point &getPosition() const = 0;
注意:虽然通过const引用传递非平凡的类型变量作为效率的参数是常见的做法(有时是不可避免的,比如复制构造函数),但是有时可能要避免它。一方面使用(const)引用会要求将这样的变量保留在类实例中(你不能返回对局部变量的引用)或更糟糕的是 - 静态变量,另一方面返回值最有可能与返回引用一样高效,由于返回值优化和移动语义和界面可以更清洁。