Pel*_*a86 0 c++ const operator-overloading
我正在尝试用C++构建一个颜色类,
这不是一个功课只是因为我仍在努力使用引用和const.
--Color.h
class Color{
private:
double r;
double g;
double b;
double a;
public:
//constructor, getters and setters...
Color& operator =(Color& other_color); //(1)
}
Run Code Online (Sandbox Code Playgroud)
--Color.cpp
Color& operator=(Color& other_color){
this->r = other_color.get_r(); //line 41
this->b = other_color.get_b();
//and so on...
return *this;
}
Run Code Online (Sandbox Code Playgroud)
像这样它工作正常,但我听说必须放一个const来避免因为错误,对象将被分配操作修改,所以必须将另一个对象声明为const.像这样:
Color& operator =(Color const& other_color); //(2)
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误:
/Users/../color.cpp:41: error: passing 'const Color' as 'this' argument of 'float Color::get_r()' discards qualifiers
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题......
这里发生了什么?如果我不将other_color声明为const ,会发生什么?有什么可能的错误?
PS.:小问题:
我想将我的变量传递给opengl glColor4v(colorx.return_rgba()),返回Color类的数组[r,g,b,a].这个:
float* Color::return_rgba(){
float rgba[4] = {this->r, this->g, this->b, this->a};
return rgba;
}
Run Code Online (Sandbox Code Playgroud)
将无法正常工作,因为rgba将在返回后不再在范围内,因此它将被删除,我的指针将指向未初始化的地址,该死的......
将'const Color'作为'float Color :: get_r()'的'this'参数传递,会丢弃限定符
这意味着你必须进一步.get_r可能被宣布为
float get_r()
Run Code Online (Sandbox Code Playgroud)
并使其工作(const-correct),你应该做到
float get_r() const
Run Code Online (Sandbox Code Playgroud)
如果我不将other_color声明为const,会发生什么?
您将无法从const-qualified Colors 分配.您通常希望能够使用const对象,以及作为赋值的来源.而且,它的目的是不向代码的读者清楚地修改源.
我想将我的变量传递给opengl glColor4v(colorx.return_rgba()),返回类Color的数组[r,g,b,a].
返回一个包含数组并自动转换为的特殊"车辆" float*.一些东西
struct ColorQuadruplet
{
float data_[4];
// add initialization and such here
operator float*() { return data_; }
};
ColorQuadruplet Color::get_rgba() const
{
ColorQuadruplet ret;
// fill ret
return ret;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1503 次 |
| 最近记录: |