私有变量在函数内赋值,但不在函数外赋值

Private variable assigned in function but not outside

本文关键字:赋值 函数 变量      更新时间:2023-10-16

我有一个类User()与私有变量字符串朋友。friends在函数addFriend()中设置,并在函数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()的交互。

因为:-

  private:
      User currentUser;

currentUser不是一个指针或引用,它是一个实际的user对象。因此,通过addFriend对其进行更改不会对矢量中的user对象产生任何影响。