Как правильно работать с объектом класса в другом классе?C++

165
05 ноября 2021, 06:30
#include <iostream>
class Pri {
public:
    Pri(int data, int time) { 
        this->data = data;
        this->time = time;
    }
    void getter() const { std::cout << data << " : " << time<< " "; };
private:
    int data,time;
};
class Event {
public:
    Event(Pri & a, std::string s) {    //коструктор в который передан объект
        this->obj = &a;
        this->eve = s; };
    void getter2() {
        std::cout << obj << " : " << eve ; //  вывод адреса указателя
    };
private:
    std::string eve;
    Pri* obj;       //хранение объекта другого класса
};
int main() {
    Pri s1(12, 21);         // создание и инициализация  объекта
    s1.getter();            //вывод полей на экран
    std::cout <<&s1<< std::endl;           //проверка адреса объекта
    Event g(s1, "asdfa");  // создание и инициализация  объекта
    g.getter2();           //вывод полей на экран
    return 0;
}

Итак. Передача объекта класса Pri в класс Event происходит успешно. В ф-ии getter2 выводится правильный адрес переданного объекта s1. При попытке разыменования (*obj) естесно происходит ошибка. Но и при вызове"(obj.getter()" происходит ошибка. Вопрос как правильно работать с объектом класса внутри другого? Как достучаться до его родных геттеров и при инициализации объекта "g" вывести на экран"12,21 : asdfa "?

Answer 1

У Вас Ошибка в обращении к указателю. Для обращения к указателю необходимо использовать оператор ->

#include <iostream>

class Pri {
public:
    Pri(int data, int time) : data(data), time(time) {}
    void getter() const
    {
        std::cout << data << " : " << time<< " " << std::endl;
    }
private:
    int data;
    int time;
};

class Event {
public:
    Event(Pri& a, std::string s) : obj(&a), eve(s) {}    //коструктор в который передан объект
    void getter2()
    {
        obj->getter();
        std::cout << eve << std::endl; //  вывод адреса указателя
    };
private:
    std::string eve;
    Pri* obj;       //хранение объекта другого класса
};

int main()
{
    Pri s1(12, 21);         // создание и инициализация  объекта
    s1.getter();            //вывод полей на экран
    Event g(s1, "asdfa");  // создание и инициализация  объекта
    g.getter2();           //вывод полей на экран
    return 0;
}
Answer 2

Все доперло! Спасибо @VTT за наводящий вопрос)) Моя ошибка в синтаксисе std::cout << obj.getter() <<" : " << eve ; Нужно же просто вызвать геттер, а затем написать cout: obj->getter(); std::cout << " : " << eve ; Тогда все ок

READ ALSO
Не могу понять как работает QPainterPath в Qt

Не могу понять как работает QPainterPath в Qt

Разбираюсь с рисовкой в Qt, пытаюсь нарисовать свою графическую фигуру, используя QPainterPathДля этого создаю класс class PuzzlePiece : public QGraphicsPathItem

140
Замена цикла на стандартный алгоритм

Замена цикла на стандартный алгоритм

Можно ли заменить следующий цикл на какой-то стандартный алгоритм библиотеки?

198
Input email неправильно проходит проверку JS Jquery

Input email неправильно проходит проверку JS Jquery

Написал проверку для input-ов на наличие хотя бы 1-ого символа для того чтобы удалить атрибут disabled с кнопки отправкиВ условии так же указал если...

205
метод sort() в JS

метод sort() в JS

Почему на консоль выводится

100