使用类中的方法作为运算符将值赋给类的私有成员

时间:2018-06-02 00:06:23

标签: c++ assignment-operator private-members

伙计们,我正在尝试使用类中的方法将值赋给该类的私有成员。我无法想象出来保存我的后腿部分。任何人都可以指出明显的吗?

#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;
}

2 个答案:

答案 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;
}