在类中使用变量(C++帮助)

Using Variables In Classes (C++ help)

本文关键字:C++ 帮助 变量      更新时间:2023-10-16

我正在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();
}

我的问题是,为什么我们必须创建一个单独的函数来返回name,而不是在第一个函数中返回它?在我的代码中,我在第一个函数中返回了name,它运行得很好。

在某些情况下,您可能需要设置变量,执行一些其他操作,然后打印变量,因此有两个函数。

如果您只想输入变量并打印它,一个函数就足够了。

set为前缀的成员函数称为setters,以get为前缀的会员函数称为getters。

当然,它们也可以有其他名称,但这些都是常见的命名约定。主要的想法是

  • getters从类内部"获取"(返回)一个变量,而
  • setters将类中的变量"设置"(更改)为某个特定值

有关使用getter和setter的基本原理,请参阅此处的答案。它们涵盖了很多关于getter和setter为什么在面向对象编程中是一件好事的要点。

声明变量是私有的,使用公共函数是设置和获取变量的接口是最佳实践。为什么不从set函数返回值是"关注点分离规则"的含义。请阅读此以获取更多信息http://en.wikipedia.org/wiki/Separation_of_concerns

因为如果不同时设置名称,您将无法编写代码来获取名称。

考虑编写一个函数来打印作为参数传递的MyClass的名称:

void printName(MyClass my_class){
    std::cout << my_class.getName() << "n";
}

如果有setName函数而没有getName函数,你会怎么写呢?

在您的琐碎示例中,您不需要getName,但实际上也不需要MyClass。你可以写:

std::cout << "Taylorn";

但很明显,这不是本教程的重点。