其他语言中的Getter和setter

Getter and setter in other languages

本文关键字:setter Getter 语言 其他      更新时间:2023-10-16

我是一个iphone程序员,知道getter和setter是如何工作的。(那个属性和合成)

但是我不熟悉其他语言,想知道如果我在c++这样的语言中创建一个变量,通过创建类的对象来访问它。
那么系统会自动为它创建getter和setter吗?
或者我需要做一些额外的工作?

c++没有提供这种功能,不幸的是,你必须手动编写getter和setter。

由于语言没有提供对这种事情的支持,因此您需要遵循一些经验法则来生成更高质量的代码:

  • 所有成员变量都应该是非公共的。如果需要访问它们,则编写getter和/或setter。这使您可以轻松地修改该变量的访问方式,而不会有太多麻烦。

  • 只有作为接口一部分的成员(即:需要是可见的)应该有getter/setter。不要一开始就为类中的每个成员写一个getter/setter对,并称之为封装,因为它不是。

  • 如果你需要一个变量的setter或getter,这并不意味着你也需要另一个。原则上,只在需要时添加一些东西:添加新东西很容易,但一旦已经有了使用该特性的代码,就很难删除它们。

一般来说,c++中的getter和setter是这样工作的:
class Person
{
  public:
     const std::string& name() const {
         return name_;
     }
     void name(const std::string& name) {
         name_ = name;
     }
  private:
    std::string name_;
};
int main()
{
    Person pers;
    pers.name("John");
    std::cout << pers.name();
    return 0;
}

很多人喜欢把这些函数命名为getName()setName(),但我更喜欢这样。还要记住总是使你的getter为const(例如。:在const std::string& name() const) —这将向编译器发出信号,表明该函数不会修改Person对象。

Edit:正如你所看到的,在c++中getter和setter就像任何其他方法一样,它们绝对没有什么特别的。

在c++中你需要做一些额外的工作。

但是是什么阻止了你去测试呢?

编辑:

你必须声明和编码你自己的方法,就像经典的函数

c++中没有getter/setter的概念(与内置getter/setter的Objective-C相比)

你必须手动操作(但这通常是一个坏主意)。