在c++(接口/类)中使用带getter的引用时
When using reference with getter in c++ (interface/class)
我只是有一个接口类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)引用会要求将这样的变量保存在类实例中(你不能返回对局部变量的引用),甚至更糟——静态变量,另一方面,按值返回很可能会像返回引用一样有效,由于返回值优化和移动语义和接口可以更清晰。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 对类成员而不是 getter 的 Const 引用
- 使用const_cast const-ref getter 实现引用获取器的陷阱
- 为什么将指针转换为引用在我的访问器 (getter) 中不起作用?
- 此getter是否返回由构造函数或对班内对象的引用给出的引用?C
- C++ 防止通过 getter 更改引用
- 引用代替 getter
- 我可以使用常量引用而不是 getter 函数吗?
- C++重载getter两次,一次返回指针,另一次返回常量引用,都失败了
- 使用getter函数传递引用参数时出现意外行为
- 通过引用返回或创建一个典型的setter/getter
- 代理对象/引用getter与setter
- getter方法中的Const引用
- C++getter临时与常量引用