I’m trying to construct a class for colors in C++,
this is not an homework is just that I’m still struggling with references and 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)
}
–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;
}
like this it works fine but I heard one has to put a const to avoid that by fault the object will be modified by the assignement operation, so one has to declare the other object as const. Like this:
Color& operator =(Color const& other_color); //(2)
but it gives me this errors:
/Users/../color.cpp:41: error: passing 'const Color' as 'this' argument of 'float Color::get_r()' discards qualifiers
so here is my question…
what is happening here? second what would happen if I don’t declare other_color as const? what are the possible errors?
PS.: little bonus question:
I want to pass my variable to the opengl glColor4v(colorx.return_rgba()) returning the array [r,g,b,a] of the class Color. This:
float* Color::return_rgba(){
float rgba[4] = {this->r, this->g, this->b, this->a};
return rgba;
}
won’t work because rgba won’t be in scope anymore after the return so it will be deleted and my pointer will point to not initialized adresses, damn…
This means you have to take it further.
get_ris probably declared asand to make it work (const-correctly), you should make it
You would be unable to assign from
const-qualifiedColors. You usually want to be able to useconstobjects, among other as source of assignment. Moreover, it makes the intent not to modify the source clear to the reader of the code.Return a special “vehicle” that would contain the array and convert automatically to
float*. Something along