我正在尝试使用getter和setter为类成员变量编写一个简单的c ++类。 getter工作正常,但我不能写setter。是否可以用setter覆盖“m_var”,或者这只能用于指针变量吗?
class Foo: public QObject {
Q_OBJECT
public:
MyOtherClass& getVar() {
return m_var;
}
private:
MyOtherClass m_var;
};
答案 0 :(得分: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;
}
答案 1 :(得分: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("\r\n %d", f1.getVar().m_someInt);
}
虽然我不喜欢这种设计的想法。
如果你真的想让getVar()只得到但不能设置,那么它应该是
const MyOtherClass& getVar()const {
return m_var;
}