Использование ссылок или указателей для выполнения метода депозита?

0

У меня возникли проблемы с пониманием передачи ссылок и указателей. Я много раз перебирал его в своей голове, но просто не могу по-видимому щелкнуть его, и я думаю, что мне нужно использовать здесь, чтобы фактически изменить значение в объекте Account.

Есть ли какие-нибудь четкие способы понять их? И как они применимы к этому довольно простому сценарию?

основной код:

if (transactionMenuChoice == 2)
{
cout << "________________________________________________" << endl;
cout << "//TRANSACTION MENU - WITHDRAWAL" << endl;
cout << "//CURRENT CUSTOMER: " << allCustomers.at(customerIndex).getName() << endl;
cout << "//CURRENT ACCOUNT: " << allCustomers.at(customerIndex).getAccounts().at(accountIndex).getAccountNum() << " (" << allCustomers.at(customerIndex).getAccounts().at(accountIndex).getType() << ")" << endl;
cout << "||Withdraw how much?" << endl;
cout << "||£" << endl;

int d;
cin >> d;   

allCustomers.at(customerIndex).getAccounts().at(accountIndex).removeFromBalance(d);
}

из моего аккаунта Account.cpp:

void Account::removeFromBalance(double d) 
{
    balance -= d;
}
  • 0
    Пример выглядит для меня так, как будто он должен работать без какой-либо явной передачи ссылок или чего-то подобного. Это также выглядит так, как будто это должно быть реализовано как есть. Однако структура данных allCustomers должна возвращать ссылки из at() . Код для этого не существует, поэтому вы не можете получить больше, чем предположение.
  • 0
    Предполагая, что allCustomers и getAccounts() являются std::vector , тогда at() возвращает ссылку. Вы передаете двойной по значению (используя семантику копирования). Это должно работать просто отлично.
Показать ещё 2 комментария
Теги:
pointers
reference

1 ответ

0
Лучший ответ

Возможно, вы имеете в виду разницу между ссылками на значения и ссылками на указатели? Указатель - это адрес вещи, а не сама вещь. Ваш адрес является "указателем" на ваш почтовый ящик, но не сам почтовый ящик. В вашей функции removeFromBalance вы передаете 'd' по значению (а не как указатель). Синтаксис объекта C++ иногда может загрязнять воду, так как вы увидите "." нотация для вызова функции-члена по фактическому (когда у вас есть объект) и '->' нотация, используемая для вызова функции-члена, когда у вас есть указатель на объект.

  • 1
    Почему эта "мутная вода"? (*a).b что a->b эквивалентно (*a).b (что это такое), и все становится очень ясным.
  • 0
    Я думаю, что для людей, которые только учатся, может быть запутанным иметь два способа доступа к члену. Тем не менее, вы делаете очень хорошую мысль.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню