У меня возникли проблемы с пониманием передачи ссылок и указателей. Я много раз перебирал его в своей голове, но просто не могу по-видимому щелкнуть его, и я думаю, что мне нужно использовать здесь, чтобы фактически изменить значение в объекте 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;
}
Возможно, вы имеете в виду разницу между ссылками на значения и ссылками на указатели? Указатель - это адрес вещи, а не сама вещь. Ваш адрес является "указателем" на ваш почтовый ящик, но не сам почтовый ящик. В вашей функции removeFromBalance вы передаете 'd' по значению (а не как указатель). Синтаксис объекта C++ иногда может загрязнять воду, так как вы увидите "." нотация для вызова функции-члена по фактическому (когда у вас есть объект) и '->' нотация, используемая для вызова функции-члена, когда у вас есть указатель на объект.
(*a).b
что a->b
эквивалентно (*a).b
(что это такое), и все становится очень ясным.
allCustomers
должна возвращать ссылки изat()
. Код для этого не существует, поэтому вы не можете получить больше, чем предположение.allCustomers
иgetAccounts()
являютсяstd::vector
, тогдаat()
возвращает ссылку. Вы передаете двойной по значению (используя семантику копирования). Это должно работать просто отлично.