我正在youtube上观看C ++教程,我正在观看一个名为“使用类中的变量”的视频。在视频中他解释说,如果我们要在课堂上公开变量,那就是糟糕的编程。它会起作用,但它的编程仍然很糟糕。他写出的程序由一个带有私有变量的类组成,他使用两个函数来访问变量。代码如下所示:
#include <iostream>
#include <string>
using namespace std;
class MyClass {
public:
void setName(string x)
{
name = x;
}
string getName()
{
return name;
}
private:
string name;
};
int main()
{
MyClass TO;
TO.setName("Taylor");
cout << TO.getName();
}
我的问题是,为什么我们必须创建一个单独的函数来返回名称,而不是在第一个函数中返回它?在我的代码中,我在第一个函数中返回了名称并且进展顺利。
答案 0 :(得分:0)
在某些情况下,您可能需要设置变量,执行其他操作然后打印变量,因此可以使用两个函数。
如果你只想输入变量并打印它,一个功能就足够了。
答案 1 :(得分:0)
声明变量是私有的并且使用公共函数是设置和获取变量的接口是最佳实践。为什么不从set函数返回值是“关注分离规则”的含义。请阅读此内容以获取有关它的更多信息http://en.wikipedia.org/wiki/Separation_of_concerns
答案 2 :(得分:0)
以set
为前缀的成员函数称为 setters ,以get
为前缀的成员函数称为 getters 。
当然,它们也可以有其他名称,但这些是常见的命名约定。主要的想法是
有关使用getter和setter的理由,请参阅the answers here。它们涵盖了许多关于为什么getter和setter在面向对象编程中是一件好事的好点。
答案 3 :(得分:0)
因为否则如果您没有设置名称,则无法编写代码来获取名称。
考虑尝试编写一个函数来打印作为参数传递的MyClass
的名称:
void printName(MyClass my_class){
std::cout << my_class.getName() << "\n";
}
您如何使用setName
函数但没有getName
函数来编写此内容?
在琐碎的示例中,您不需要getName
,但实际上您也不需要MyClass
。你可以写:
std::cout << "Taylor\n";
但很明显,这不是本教程的重点。