如何为类成员变量编写setter

How to write setter for class member variable?

本文关键字:setter 变量 成员      更新时间:2023-10-16

我想写一个简单的类在c++ getter和setter为类成员变量。getter工作得很好,但我不能写setter。是否有可能用setter覆盖"m_var",或者这仅适用于指针变量?

class Foo: public QObject {
Q_OBJECT
public:
MyOtherClass& getVar()  {
    return m_var;
}
private:
  MyOtherClass m_var;
};

应该是这样的:

// this is your setter
// you can set the var parameter as const because it is just copied to var
void setVar(const MyOtherClass& var){m_var = var;}
//this is your getter
MyOtherClass& getVar() {return m_var;}
// also this getter should be declared as const because you return a copy 
// of m_var and thus you do not modify the object
MyOtherClass getVarByCopy() const {return m_var;}

下面的代码用g++可以很好地编译:

class A
{
public :
   int someInt;
};
class B{
    A m_var;
public:
    void setVar(const A& var){m_var = var;}
    A& getVar() {return m_var;}
};
int main(int argc, char* argv[])
{
    B b;
    A a;
    a = b.getVar();
    b.setVar(a);
    return 0;
}

我们错过了什么吗?

class Foo: ...
{
.....
.....
MyOtherClass& getVar()  {
return m_var;
}

getVar() 

实际上是一个setter,因为它返回一个非const引用。

检查此代码。

    class MyOtherClass
    {
    public:
        MyOtherClass(int i=10)
        {
            m_someInt = i;
        }
        int m_someInt;
    };
    class QObject
    {
    };

    class Foo: public QObject 
    {
        // Q_OBJECT
    public:
        MyOtherClass& getVar()  
        {
            return m_var;
        }
    private:
        MyOtherClass m_var;
    };
    void someFunc()
    {
        Foo f1;
        printf("%d", f1.getVar().m_someInt);
        f1.getVar() = 100;
        printf("rn %d", f1.getVar().m_someInt);
    }
虽然我不喜欢这样的设计。
如果你真的希望getVar()只获取而不设置,那么它应该是
const MyOtherClass& getVar()const  {
return m_var;
}