Указатели на объекты в C ++ - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь освоить указатели и объекты C ++ с помощью небольшого проекта, реализующего простую проблему маршрутизации транспортных средств.Хотя мой код в настоящее время работает, я не могу избавиться от ощущения, что мой подход совершенно неверен.Что меня беспокоит, так это фрагменты кода, такие как:

std::map<const Route*, double>::iterator it = quantities.begin();
if ((*(*(it->first)).getDestination()).getDemand() > (*(*(it->first)).getDeparture()).getSupply())

Ситуация с адскими указателями в условии if является результатом того, что методы get возвращают указатели на уже созданные объекты.Вызываемые методы:

const Departure* Route::getDeparture() const {
    return departure;
};

const Destination* Route::getDestination() const {
    return destination;
};

и

int Destination::getDemand() const {
    return demand;
};

int Departure::getSupply() const {
    return supply;
};

Я совершенно не в курсе, я что-то упускаю или этот тип ситуации является чем-то нормальным?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Для повышения читабельности вы можете изменить * s на ->:

if(it->first->getDestination()->getDemand() > it->first->getDeparture()->getSupply())

Кроме того, , если вы не собираетесь отказываться от владения этим объектом (а в данном случае это не так), лучше вернуться по ссылке const:

const Departure& Route::getDeparture() const {
  return *departure;
};

и используйте ., а не ->:

if(it->first->getDestination().getDemand() > it->first->getDeparture().getSupply())
2 голосов
/ 03 апреля 2012

вместо (*p).x напишите p->x.

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