- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我最初来自 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;
}
据我所知,这些是优势:
以及缺点:
我为什么选择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;
};
关于c# - get 和 set 函数在 C++ 程序员中很流行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737409/
我想知道是否有一个“标准”类(JDK、Guava、Apache *)可以帮助延迟初始化/计算模式? 我正在考虑这样的事情(现在让我们忽略同步): abstract class Lazy { T i
我要创建一个从 html 到某种格式的转换器。我正在考虑使用中间格式 XML(XSL-FO)。 我的问题:如果没有那么多应用程序渲染它,为什么 FO 格式很受欢迎? 最佳答案 我很清楚 CSS 和 X
我发现了 IDEF就在昨天,我立即想知道为什么它不比 UML 更流行。从documents来看,IDEF 至少与 UML 一样适用于软件建模,但与 UML 相比,它已经成熟和稳定了大约 30 年。 这
首先,对于版主来说,如果这不是发布此内容的正确位置,请不要生气:)。 我想知道是否有类似 TodoMVC 的东西适用于 Django、Rails、Symfony 等流行的 Web 框架。 如果没有这样
在我的应用程序中,我有一个 UIScrollView,其中包含 N 个可以向左或向右滑动的 ViewController 在每个 Controller 中,我希望能够推送新的 viewControll
我是一名优秀的程序员,十分优秀!