Использование метода в классе в качестве оператора для присвоения значения частному члену класса - PullRequest
0 голосов
/ 02 июня 2018

Ребята, я пытаюсь использовать метод внутри класса для присвоения значения частному члену этого класса.Я не могу понять это, чтобы спасти мои задние части.Кто-нибудь может указать на очевидное?

#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 голосов
/ 02 июня 2018

Ради интереса вы можете сделать это:

#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.

0 голосов
/ 02 июня 2018

Вы можете передать значение, которое вы хотите установить в качестве аргумента.

void SetAnInt(int val) {
    this->anInt = val;
     //or just
    //anInt = val
    }

Затем вы можете вызвать его в main как

 nc->SetAnInt(133);

В качестве альтернативы, чтобы бытьв состоянии написать

nc->SetAnInt() = 133; 

вам нужно будет SetAnInt() вернуть ссылку на элемент данных anInt

int& SetAnInt() {
    return anInt;
}
...