可能是一个非常简单的问题,但我有一段时间想到这一点。我有一个基类:
class User
{
public:
User();
~User();
void GetUser();
void SetUser();
protected:
std::string name;
};
这是我的派生类:
class UserInfo: public User
{
public:
void GetUser();
};
方法:
User::User()
{
name = "";
}
void User::GetUser()
{
cout << name;
}
void User::SetUser()
{
cin >> name;
}
User::~User()
{
name = "";
}
void UserInfo::GetUser()
{
cout << " ";
User::GetUser();
cout << ", you entered: ";
}
一切似乎都运行良好,但是当我从程序中调用UserInfo :: GetUser()时,它不会执行或检索存储在User类的name成员中的值。我如何获得这个价值?感谢。
答案 0 :(得分:3)
您的功能名称及其功能可以改进。不要将成员变量与cin
或cout
混合使用。我建议更改功能如下。
class User
{
public:
User();
~User();
// Make the Get function a const member function.
// Return the name.
std::string const& GetName() const;
// Take the new name as input.
// Set the name to the new name.
void SetName(std::string const& newName);
protected:
std::string name;
};
并将它们实现为:
std::string const& User::GetName() const
{
return name;
}
void User::SetName(std::string const& newName)
{
name = newName;
}
之后,您不需要GetUser
中的UserInfo
成员函数。
准备好设置User
的名称时,请使用:
User u;
std::string name;
std::cin >> name;
u.SetName(name);
这允许您将User
的名称设置与您从该名称中获取的名称分开。
当您准备打印名称User
时,请使用:
std::cout << u.GetName();
这使您可以在获取名称后将User
的名称与获取名称的方式分开。