私有变量在函数内赋值,但不在函数外赋值
Private variable assigned in function but not outside
我有一个类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
对象产生任何影响。
相关文章:
- gtest_使用setargpointee在函数中赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 关于 c++ 函数中指针赋值的简单问题
- 复制构造函数、赋值运算符C++
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 为用户定义的类正确调用复制构造函数/赋值运算符
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 赋值 boost::intrusive_ptr 而不调用构造函数?
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 为什么我不能为变量赋值函数?
- C++标准是否对向量赋值函数或构造函数提出了明确的要求
- 为什么当复制赋值函数不返回任何内容时编译器不引发错误?
- 为什么当定义析构函数时,编译器不再添加默认的move函数和赋值函数
- 编译器为具有引用和常量成员的类生成了复制/赋值函数
- 添加unique_ptr作为类的实例字段,而不是显式地删除复制/赋值函数
- c++只赋值函数调用返回的结构体的一部分