1

クラスメンバー変数のgetterとsetterを使用して、C++で単純なクラスを作成しようとしています。ゲッターは正常に動作しますが、セッターを作成できません。「m_var」をセッターで上書きすることは可能ですか、それともポインター変数に対してのみ可能ですか?

class Foo: public QObject {
Q_OBJECT
public:

MyOtherClass& getVar()  {
    return m_var;
}

private:
  MyOtherClass m_var;
};
4

2 に答える 2

2

これは次のようになります。

// 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;
}
于 2013-03-13T10:52:33.763 に答える
0

何か不足していますか?

class Foo: ...
{
.....
.....

MyOtherClass& getVar()  {
return m_var;
}

君の

getVar() 

非 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("\r\n %d", f1.getVar().m_someInt);
    }

私はそのようなデザインのアイデアが好きではありませんが。
getVar() を取得のみで設定しないようにしたい場合は、次のようにする必要があります。

const MyOtherClass& getVar()const  {
return m_var;
}
于 2014-09-03T04:40:47.813 に答える