Получение значения из вложенного класса в c ++ - PullRequest
0 голосов
/ 25 января 2020

Пожалуйста, я пытаюсь распечатать значение вложенного класса из спецификатора частного доступа.

#include <iostream>
#include <cstdlib>

using namespace std;

class cal{
    private:
        int a = 0;

    public:
        int setNum(int m){
            a = m;
        }
        void getNum(){

            cout<<"the number is: "<<a<<endl;

        }
        class area{
            public:
                int setMan(int z){
                    cal obj;
                    obj.setNum(z);
                    return 1;
                }
        };
};

int main(){
    cal::area obj2;
    obj2.setMan(200);

    cal obj3;
    obj3.getNum();
    '
    return 0;
}

cal::area obj2; obj2.setMan(200); - установить 200 в область вложенных классов и в функцию setMan из которых setMan, которые передают то же значение в int setNum(int m){a = m;}, установят значение a равным "200". Затем я хотел распечатать значение a, но вместо 200 отображается 0.

Ответы [ 2 ]

1 голос
/ 25 января 2020
int setMan(int z){
    cal obj;
    obj.setNum(z);
    return 1;
}

Объект obj является временным автообъектом и будет уничтожен при возврате из функции. Между прочим, функции «set» не должны возвращать значения, возвращение 1. сбивает с толку.

Если вы подключите объекты sh, то каким-то образом рассмотрите состав или объединение. Например:

// ...
        class area{
            public:
                area(cal& obj) : obj(obj);
                int setMan(int z){
                    obj.setNum(z);
                    return 1;
                }
                cal &obj;
        };
// ...


int main(){
    cal obj;
    cal::area obj2(obj);
    obj2.setMan(200);

    obj.getNum();
    return 0;
}

В любом случае, это просто искусственный пример, я не вижу причины, по которой вы делаете area вложенным классом, причину установки значений в cal из area и др. c.

1 голос
/ 25 января 2020

Определение вложенного класса обеспечивает только определение для вложенного класса. Если вы хотите иметь члена этого класса, вы должны объявить его:

struct cal {
    struct area {};      // class definition
    area m_area;         // member
};
...