在功能中分配的私有变量但不在外部

时间:2015-09-25 14:33:31

标签: c++ class variables private

我有一个带有私有变量字符串朋友的类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()的交互。

1 个答案:

答案 0 :(得分:1)

因为: -

  private:
      User currentUser;

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