我有一个带有私有变量字符串朋友的类User()。在函数addFriend()中设置了friends并在函数getFriends()中返回。
class User
{
public:
User();
void setName(string username);
void addFriend();
string getFriends();
string getName();
private:
string name;
string friends;
};
User::User()
{
friends = ",";
}
void User::setName(string username)
{
name = username;
}
void User::addFriend()
{
string friendName;
cout << "Enter friends name: "; //inputs "Bob"
cin >> friendName;
cout << endl;
friends += friendName + ",";
cout << getFriends() << endl; //this outputs ",Bob,"
}
string User::getFriends()
{
return friends;
}
string User::getName()
{
return name;
}
addFriend()函数表现如何将朋友添加到好友列表时,用逗号分隔它们。当我在addFriend()函数中调用getFriends()函数时,它的行为与预期的一样。但是,当我尝试调用user.getFriends();我只得到一个逗号(“,”)。
class System
{
public:
System();
void createUser();
User& getCurrentUser();
vector<User> users;
private:
User currentUser;
};
System::System() {}
void System::createUser()
{
string username;
bool userExists = false;
cout << "Please enter a user name: ";
cin >> username;
cout << endl;
for(int i = 0; i < users.size(); i++)
{
if(users.at(i).getName() == username)
userExists = true;
}
if(!userExists)
{
User temp; //creates a temporary user stored in vector of Users
users.push_back(temp); //puts new User at end of users
users.back().setName(username);
currentUser = users.back();
}
if(userExists)
cout << "User already exists." << endl << endl;
}
User& System::getCurrentUser()
{
return currentUser;
}
系统类可以毫无问题地调用User()中的其他未指定函数。
int main()
{
System system;
system.createUser(); //create user named "Bill"
system.getCurrentUser().addFriend(); //inputs "Bob"
for(int i = 0; i < system.users.size(); i++)
{
string buddies = system.users.at(i).getFriends();
cout << "User: " + system.users.at(i).getName();
cout << " - Friends: " << buddies << endl;
}
}
这只输出一个逗号。这是为什么?
编辑1:语言是C ++。
编辑2:为了简单起见,我遗漏了大部分代码,我认为是问题所在。我现在正在添加一个类,它的函数以及它与User()的交互。
答案 0 :(得分:1)
因为: -
private:
User currentUser;
currentUser
不是指针或引用,它是实际的user
对象。因此,通过addFriend
对其进行更改不会对向量中的user
对象产生任何影响。