C++中class中对私有变量的访问
C++中写class时,对私有变量通常使用set和get方法来进行访问,比较标准的例子
class A { int ia {}; int ib {}; int ic {}; public: A (int a, int b, int c) : ia(a), ib(b), ic(c) {} //构造函数 void seta(int a) { ia = a; } void setb(int b) { ib = b; } void setc(int c) { ic = c; } int geta() const { return ia; } int getb() const { return ib; } int getc() const { return ic; } };
加入我们把一个类class的一个对象定义为const时(使用const qualified)时,调用这个类的方法,比如调用这个类的get方法,如果这个方法不是const时,会报错. 如下:
#include <format> #include <iostream> using std::format; using std::cout; // a very simple class class C1 { int c1val {}; public: void setvalue(int value) { c1val = value; } int getvalue() { return c1val; } }; int main() { C1 o1; o1.setvalue(47); const C1 o2 = o1; //定义了类C1的一个const对象o2 cout << format("value is {}\n", o1.getvalue()); cout << format("value is {}\n", o2.getvalue()); //这一行会报错, 'this' argument to member function 'getvalue' has type 'const C1',but the function is not marked const
}
为了解决上面的问题,我们通常可以定义2个getvalue方法,一个是现在这样默认的,另一个是加const标志的. 如下
#include <format> #include <iostream> using std::format; using std::cout; // a very simple class class C1 { int c1val {}; public: void setvalue(int value) { c1val = value; } int getvalue(); int getvalue() const; } int C1::getvalue() { return c1val; }
/*
加了const你就不能在这个方法里面去改变clval的值,比如下面这样,就会报错
int C1::getvalue() const{ clval = 42; return c1val;} //报错 can not assgin to non-static data member within const member function..
*/
int C1::getvalue() const { return c1val; } int main() { C1 o1; o1.setvalue(47); const C1 o2 = o1; //定义了类C1的一个const对象o2 cout << format("value is {}\n", o1.getvalue()); cout << format("value is {}\n", o2.getvalue()); //现在这一行不会报错了 }