Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为类成员变量编写setter? 我试图用C++和GETER和SETER编写一个类成员变量的简单类。getter很好用,但我不会写setter。是否可以使用setter覆盖“m_var”,或者这仅适用于指针变量 class Foo: public QObject { Q_OBJECT public: MyOtherClass& getVar() { return m_var; } private: MyOtherClass m_var; };_C++_Setter - Fatal编程技术网

如何为类成员变量编写setter? 我试图用C++和GETER和SETER编写一个类成员变量的简单类。getter很好用,但我不会写setter。是否可以使用setter覆盖“m_var”,或者这仅适用于指针变量 class Foo: public QObject { Q_OBJECT public: MyOtherClass& getVar() { return m_var; } private: MyOtherClass m_var; };

如何为类成员变量编写setter? 我试图用C++和GETER和SETER编写一个类成员变量的简单类。getter很好用,但我不会写setter。是否可以使用setter覆盖“m_var”,或者这仅适用于指针变量 class Foo: public QObject { Q_OBJECT public: MyOtherClass& getVar() { return m_var; } private: MyOtherClass m_var; };,c++,setter,C++,Setter,这应该是这样的: // 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 s

这应该是这样的:

// 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;
}
你的

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

检查此代码

    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("\r\n %d", f1.getVar().m_someInt);
    }
虽然我不喜欢这种设计的想法。
如果您真的希望getVar()只获取而不设置,那么它应该是

const MyOtherClass& getVar()const  {
return m_var;
}

这是您的完整代码吗?“但我无法编写setter”您是什么意思/类似这样的:
MyOtherClass setVar(MyOtherClass*var){m_var=var;}
提示:浅拷贝与深拷贝?按值调用与按引用调用?复制构造函数?这就是你提供给imho的代码的全部内容。为什么你需要一个getter和setter?你可以把m_var公之于众。正如你所说,getter和setter都是公开的。或者,在将值分配给m_var之前,是否要执行一些测试或触发一些事件?只有在这种情况下,setter/getter才有用。为什么要使用const?MyOtherClass类的变量可能永远不会更改吗?使用此setter,我得到了以下错误:合成方法“MyOtherClass&MyOtherClass::operator=(const MyOtherClass&)=(const MyOtherClass&)”,此处首先需要const setter返回const引用!!写一个常量和一个非常量的getter。@Thomas true,我很快地写下了我的答案,在发布之前没有再次把它涂红。
const MyOtherClass& getVar()const  {
return m_var;
}