伙计们,我正在尝试使用类中的方法将值赋给该类的私有成员。我无法想象出来保存我的后腿部分。任何人都可以指出明显的吗?
#include <cstdlib>
#include <cstdio>
using namespace std;
class NoClass {
public:
NoClass() { };
NoClass(const NoClass& orig) { };
virtual ~NoClass() { };
void SetAnInt() {
this->anInt = ???;
}
int GetAnInt() {
return this->anInt;
}
private:
int anInt;
};
int main(int argc, char** argv) {
NoClass *nc = new NoClass();
nc->SetAnInt() = 133; // Important part here
printf("%d\n", nc->GetAnInt());
return 0;
}
答案 0 :(得分:3)
只是为了好玩,你可以这样做:
#include <cstdlib>
#include <cstdio>
using namespace std;
class NoClass {
public:
NoClass() { };
NoClass(const NoClass& orig) { };
virtual ~NoClass() { };
int& SetAnInt() {
return anInt;
}
int GetAnInt() {
return this->anInt;
}
private:
int anInt;
};
int main(int argc, char** argv) {
NoClass *nc = new NoClass();
nc->SetAnInt() = 133; // Important part here
printf("%d\n", nc->GetAnInt());
return 0;
}
请注意,这会利用该语言来克服数据隐藏,这是面向对象编程的基石之一。这不好。就像,真的,非常糟糕。所以,不要这样做。但是你可以。而且我很想听听教授对此的看法。
此外,无关的this->
会损害代码的可读性,而这不是java。
答案 1 :(得分:2)
您可以将要设置的值作为参数传递。
void SetAnInt(int val) {
this->anInt = val;
//or just
//anInt = val
}
然后,你可以像在
中那样在主体中调用它 nc->SetAnInt(133);
或者,能够写
nc->SetAnInt() = 133;
您需要让SetAnInt()
返回对数据成员anInt
int& SetAnInt() {
return anInt;
}