【发布时间】:2011-11-27 01:34:30
【问题描述】:
我正在尝试解决 my question 关于在多个级别中使用 push_back 的问题。从 cmets/answers 很明显,我必须:
- 创建一个接受 const 参数的复制运算符
- 将我的所有运算符修改为 const
但是因为这个头文件是给我的,所以有一个运算符,我不能把它变成 const。很简单:
float & operator [] (int i) {
return _item[i];
}
在给定的程序中,该运算符用于获取和设置数据。
我的问题是因为我需要在头文件中有这个操作符,我不能把所有其他的操作符都变成const,这意味着我不能插入一个复制操作符。
我怎样才能让我的所有运算符都变成 const,同时保留已经编写的程序的功能?
这是类的完整声明:
class Vector3f {
float _item[3];
public:
float & operator [] (int i) {
return _item[i];
}
Vector3f(float x, float y, float z)
{ _item[0] = x ; _item[1] = y ; _item[2] = z; };
Vector3f() {};
Vector3f & operator = ( const Vector3f& obj)
{
_item[0] = obj[0];
_item[1] = obj[1];
_item[2] = obj[2];
return *this;
};
Vector3f & operator += ( const Vector3f & obj)
{
_item[0] += obj[0];
_item[1] += obj[1];
_item[2] += obj[2];
return *this;
};
bool operator ==( const Vector3f & obj) {
bool x = (_item[0] == obj[0]) && (_item[1] == obj[1]) && (_item[2] == obj[2]);
return x;
}
// my copy operator
Vector3f(const Vector3f& obj) {
_item[0] += obj[0];
_item[1] += obj[1];
_item[2] += obj[2];
return this;
}
};
【问题讨论】:
-
我认为这个问题的核心存在根本性的误解。
-
你确实不需要需要
Modify all my operators to const。无论如何,其中一半对 const 对象毫无意义。
标签: c++ class vector copy operator-keyword