在c ++中使用带getter的引用时(接口/类)

时间:2015-08-04 20:55:13

标签: c++ interface reference getter

我只有一个带有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使用的错误。当我不使用引用时,我的程序运行正常。

谢谢

1 个答案:

答案 0 :(得分:2)

根据错误,您尝试使const方法返回lvalue(非常量)引用,从而导致错误。只需让它返回const引用:

virtual const Point &getPosition() const = 0;

注意:虽然通过const引用传递非平凡的类型变量作为效率的参数是常见的做法(有时是不可避免的,比如复制构造函数),但是有时可能要避免它。一方面使用(const)引用会要求将这样的变量保留在类实例中(你不能返回对局部变量的引用)或更糟糕的是 - 静态变量,另一方面返回值最有可能与返回引用一样高效,由于返回值优化和移动语义和界面可以更清洁。