gpt4 book ai didi

c++ - 重载流插入运算符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:45 25 4
gpt4 key购买 nike

我正在用 C++ 创建一个三维 vector 类(称为 Vector3)。现在,我正在尝试重载流插入运算符 ( << ),以便我可以直接同时打印所有 vector 的组件。我从 MSD 复制了语法,但我收到 3 个错误。

error: passing 'const Vector3 ' as 'this' argument of 'float Vector3::getX()' discards qualifiers [-fpermissive]
error: passing 'const Vector3 ' as 'this' argument of 'float Vector3::getY()' discards qualifiers [-fpermissive]
error: passing 'const Vector3 ' as 'this' argument of 'float Vector3::getZ()' discards qualifiers [-fpermissive]

(差异以粗体标记)

Vector3.h在 public 下,我输入了这个函数声明:

friend ostream& operator<<(ostream &os, const Vector3 &vector);

Vector3.cpp ,我实现了它:

ostream& operator<<(ostream& os, const Vector3& vector)
{
os << "(" << vector.getX() << ", " << vector.getY() << ", " << vector.getZ() << ")" << endl;
return os;
}

它应该打印出类似 (x, y, z) 的内容根据 x、y 和 z 变量。

附带说明一下,vector.getX() 不应该吗?行使用 ->而不是点,因为 vector 对象是地址指针?

最佳答案

const 限定符添加到您的 get... 函数。

class Vector3
{
public:
float getX() const {return x;};
};

const 限定的函数只是意味着您可以在类的 const 实例上调用它。在这里, setter/getter 不会改变任何东西。但是,如果您不指定,编译器将不知道,因此不允许调用可能会更改 const 变量的函数。

您可以阅读有关 const-correctness here 的内容.

点符号是正确的,vector 不是指针,而是引用(即其他的别名Vector3。我认为 & 符号对于初学者来说可能有点困惑。粗略地说:当你将它应用于一个变量时,它获取它的地址,当它是一个类型的一部分时,它意味着该类型是引用。例如,请参阅 herehere

关于c++ - 重载流插入运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11953629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com