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

When using reference with getter in c++ (interface/class)

本文关键字:getter 引用 c++ 接口      更新时间:2023-10-16

我只是有一个接口类2 getter。1返回'Point'类的值。我有一个使用接口类的其他类,所以他需要实现2个getter。就像我们在课程中学到的那样,最好使用引用来节省存储和cpu。所以我尝试了,但我的程序不工作,当我使用引用的getPosition()(点的getter)。这是我的代码。我的问题是。在c++中使用或不使用getter引用有(通用)规则吗?由于

Interface: 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的错误。

"这一行有多个标记—实现IObject::getPosition从"Point"类型引用到"const Point"类型值的绑定将取消限定符"

错误说明了const的一些问题。我检查了一下,这更奇怪了,因为没有关于const-use的错误。当我不使用引用时,我的程序工作得很好。

谢谢

根据错误,您试图使您的const方法返回左值(非const)引用,因此出现错误。只需将其改为返回const引用:

virtual const Point &getPosition() const = 0;

注意:虽然通过const引用将非平凡类型变量作为参数传递以提高效率是常见的做法(有时是不可避免的,例如复制构造函数),但对于返回,有时您可能希望避免它。一方面,使用(const)引用会要求将这样的变量保存在类实例中(你不能返回对局部变量的引用),甚至更糟——静态变量,另一方面,按值返回很可能会像返回引用一样有效,由于返回值优化和移动语义和接口可以更清晰。