我有一个程序,当一个类从另一个类调用一个函数来访问或更改其成员变量时,没有任何反应。即使我要调用setName(“John”)函数然后尝试使用getName()函数获取名称,该字符串将返回空,与所有其他变量类型相同。 我的课程功能有问题吗?我是c ++的新手,这是我第一次在一个程序中使用多个头文件和类文件,所以这样的小东西往往会让我...
这是我的第一个标题类:
class Customer{
private:
string firstName;
string lastName;
string adress;
long socialSecurity;
float interstRate;
float balance;
string accountType;
public:
Customer(){
this->firstName = "";
this->lastName = "";
this->adress = "";
this->socialSecurity = 0;
this->interstRate = 0.0;
this->balance = 0.0;
this->accountType = "";
};
Customer(string first, string last, string adrs, long sociNum, float rate, float bal, string type){
this->firstName = first;
this->lastName = last;
this->adress = adrs;
this->socialSecurity = sociNum;
this->interstRate = rate;
this->balance = bal;
this->accountType = type;
};
public:
void updateBalance();
void setName(string first, string last);
string getFirstName();
string getLastName();
void setAdress(string adrs);
//other methods omitted to preserve length
};
第二个标题:
#include <vector>
#include "Customer.h"
class Bank{
public:
void createAccount( Customer );
void printAccount( vector<Customer>&, int );
void print_ALL_Acounts( vector<Customer>& );
int search( vector<Customer>&);
};
银行类内部的功能示例:
void Bank::createAccount(Customer newCust){
string first, last, adress, accountT;
long ssn;
float rate, balance;
cout<< "Please Specify A First And Last Name: ";
cin>> first >> last;
newCust.setName(first, last);
cout<< "Please Specify An Adress: ";
getline(cin, adress);
cout << endl;
newCust.setAdress(adress);
cout<< "Please Specify A Social Security Number: ";
cin>> ssn;
newCust.setSocialSecurity(ssn);
cout<< "Please Specify An Account Type: ";
cin>> accountT;
newCust.setAccountT(accountT);
cout<< "Please Specify An Interest Rate: ";
cin>> rate;
newCust.setInterest(rate);
cout<< "Please Specify An Account Balance: ";
cin>> balance;
newCust.setBalance(balance);
}
客户类中的功能示例:
void Customer::updateBalance()
{
balance = balance*interstRate;
}
void Customer::setName(string first, string last){
firstName = first;
lastName = last;
}
string Customer::getFirstName(){
return firstName;
}
string Customer::getLastName(){
return lastName;
}
void Customer::setAdress(string adrs){
adress = adrs;
}
最后,这就是我在主类中称呼它们的方式:
Bank bank;
Customer account;
vector<Customer> accountList;
bank.createAccount(account);
accountList.push_back(account);
然后如果我要打印我创建的帐户列表,他们都会显示空值。 因此,任何人都可以指出并解释我做错了什么?
答案 0 :(得分:1)
当您将account
传递给createAccount
时,您将按值传递它。这意味着您将其复制到函数中并修改副本。您传递的account
变量未经修改。
目前,一个简单的解决方案是通过引用传递Customer
:
void Bank::createAccount(Customer& newCust);
引用类型(带&
)允许您修改传递给函数的原始对象。
但是,我只会认为这是一个临时解决方案,因为看起来你的架构有点奇怪。我希望Bank
跟踪accountList
(作为成员),然后createAccount
最后会push_back
。
另外,请考虑一下您的命名约定。我很困惑地看到名为Customer
的{{1}}变量。并且“地址”拼写为两个D。
答案 1 :(得分:0)
您需要通过引用传递Customer
实例以获取正确设置的值
void Bank::createAccount(Customer& newCust) {
// ^
// ...
}
其他地方可能也一样。
否则,您只需更改此函数堆栈上由Customer
实例组成的副本。原件将保持不变。