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()); //现在这一行不会报错了 }

 

posted on 2022-11-28 15:06  新西兰程序员  阅读(218)  评论(0编辑  收藏  举报