Как получить доступ к членам класса из производного класса - C ++ - PullRequest
1 голос
/ 10 апреля 2020

У меня есть два класса под названием «Associate» и «report», которые объявлены в файлах «associate.h» и «report.h» соответственно. класс отчета наследует ассоциированный класс в report.h следующим образом

associate.h

class associate {
public:
int num1, num2;
}

report.h

class report : public associate {
public:
int add();
}

У меня есть main. cpp где Я включил заголовок associate.h и создал объект и инициализированные значения для того же, как показано ниже.

associate a{};
a.num1 = 10;
a.num2 = 20;

теперь у меня есть еще один cpp файл с именем report. cpp, где я включил report.h и associate.h и пытается получить доступ к значениям num1 и num2, таким как

report r{};
cout << r.num1 << num2 << endl;

, которые фактически не печатают 10 и 20, которые я установил в main. cpp. Как получить доступ к этим значениям из другого файла cpp в этом случае из отчета. cpp?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

r и a - два разных объекта, которые занимают разные объемы памяти. Таким образом, изменение объекта a не влияет на объект r.

Если вы хотите, чтобы объект r получал значения данных-членов объекта a, то вам необходимо присвоить объект a подобъекту тип ассоциированного объекта r.

Вот демонстрационная программа.

#include <iostream>

class associate {
public:
    int num1, num2;
};

class report : public associate {
public:
    int add();
};

int main() 
{
    associate a {};
    a.num1 = 10;
    a.num2 = 20;

    report r {};

    r.associate::operator =( a );

    std::cout << r.num1 << ' ' << r.num2 << std::endl;

    return 0;
}

Выходные данные:

10 20

Другой подход заключается в том, что отчет класса представляет собой агрегат, то вы можете написать

associate a{};
a.num1 = 10;
a.num2 = 20;

report r = { { a.num1, a.num2 } };
0 голосов
/ 10 апреля 2020

Ты не. Вы не можете.

Вы создали два совершенно разных, не связанных между собой объекта. Они даже разных типов (один - associate, а другой - report; хотя в этом случае вас интересуют только общие части associate, так что это нормально). Один объект не содержит значений из другого, не связанного с ним объекта.

Мы не можем видеть структуру вашей программы, но мне кажется, что вам нужно передавать указатели или ссылки на ваш one объект, если вы хотите использовать его в нескольких местах. Как именно это сделать, зависит от вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...