gpt4 book ai didi

c# - get 和 set 函数在 C++ 程序员中很流行吗?

转载 作者:IT老高 更新时间:2023-10-28 12:38:00 32 4
gpt4 key购买 nike

我最初来自 C# 世界,并且正在学习 C++。我一直想知道 C++ 中的 get 和 set 函数。在 C# 中,它们的使用非常流行,像 Visual Studio 这样的工具通过使它们非常容易和快速地实现来促进使用。但是,在 C++ 世界中似乎并非如此。

这是 C# 2.0 代码:

public class Foo
{
private string bar;

public string Bar
{
get { return bar; }
set { bar = value; }
}
}

或者,在 C# 3.0 中:

public class Foo { get; set; }

也许人们会说,那有什么意义呢?为什么不直接创建一个公共(public)字段,然后在需要时将其设为属性;老实说,我实际上不确定。我只是出于良好的实践而这样做,因为我已经看到它这样做了很多次。

现在因为我已经习惯了,我觉得我应该把这个习惯带到我的 C++ 代码中,但这真的有必要吗?我认为它不像 C# 那样经常完成。

无论如何,这是我收集到的 C++:

class Foo
{
public:
std::string GetBar() const; // Thanks for the tip, @Daniel Earwicker.
void SetBar(std::string bar);
private:
std::string bar;
}

std::string Foo::GetBar() const
{
return bar;
}

void Foo::SetBar(std::string bar)
{
// Also, I always wonder if using 'this->' is good practice.
this->bar = bar;
}

现在,对我来说,这似乎是一项艰巨的工作;考虑使用 Visual Studio 的工具,C# 实现实际上需要几秒钟的时间来实现,而 C++ 花了我更长的时间来输入 - 我觉得它不值得付出努力,尤其是当替代方案是 5 行时:

class Foo
{
public:
std::string Bar;
}

据我所知,这些是优势:

  • 您可以更改 get 和 set 函数的实现细节,因此您可以返回更有趣的内容,而不是返回私有(private)字段。
  • 您可以稍后删除 get/set 并使其仅读/写(但对于面向公众的界面,这似乎不太好)。

以及缺点:

  • 需要很长时间才能打字,这真的值得吗?通常来说,一般来说。在某些情况下,这些优势值得付出努力,但我的意思是,就“良好做法”而言,是吗?

答案:

我为什么选择the answer with less votes ?我实际上非常接近选择veefu's answer ;然而,我个人的看法(这显然是有争议的)是,这个答案过度怂恿了布丁。

另一方面,我选择的答案似乎对双方都有争议;我认为如果过度使用 getter 和 setter 邪恶的(我的意思是,当它没有必要并且会破坏业务模型时),但我们为什么不应该有一个名为 GetBalance( )?

这肯定比 PrintBalance() 更通用;如果我想以不同于类(class)希望的方式向用户展示它怎么办?现在,从某种意义上说,GetBalance() 可能不足以证明“getter 和 setter 是好的”,因为它不是(或者可能,不应该)有一个附带的 setter ,说到其中,一个名为 SetBalance(float f) 的函数可能不好(在我看来),因为它暗示该函数的实现者必须操纵帐户类的一面,这不是一件好事。

最佳答案

我认为在 C++ 中提供访问器比在 C# 中更重要。

C++ 没有对属性的内置支持。在 C# 中,您几乎可以在不更改用户代码的情况下将公共(public)字段更改为属性。在 C++ 中,这是 harder .

为了减少输入,您可以将琐碎的 setter/getter 实现为内联方法:

class Foo
{
public:
const std::string& bar() const { return _bar; }
void bar(const std::string& bar) { _bar = bar; }
private:
std::string _bar;
};

别忘了 getters and setters are somewhat evil.

关于c# - get 和 set 函数在 C++ 程序员中很流行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737409/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com