在C++类中使用常量引用字段作为只读getter方法好吗?
我的意思是,这段代码符合好的实践吗?
class check{
private:
int _x;
public:
const int& x = _x;
void setX(int v){
_x = v;
}
};
它的工作方式非常类似于C#属性,IMHO,并且在类使用代码中非常简单和整洁:
check s;
int i;
std::cin >> i;
s.setX(i);
std::cout << s.x << '\n';
s.setX(7);
// s.x = i; // Error
std::cout<<s.x<<'\n';
发布于 2017-09-18 23:54:31
当C#编译一个属性时,它会被编译成一个getter和一个setter函数。
下面是一些C#代码,可以证明这一点:
using System;
namespace Reflect
{
class Program
{
class X
{
public int Prop { get; set; }
}
static void Main(string[] args)
{
var type = typeof(X);
foreach (var method in type.GetMethods())
{
Console.WriteLine(method.Name);
}
Console.ReadKey();
}
}
}
您的输出应为:
get_Prop
set_Prop
ToString
Equals
GetHashCode
GetType
get_Prop
是实现getter的函数。set_Prop
是实现设置器的函数。
所以,即使你正在做的事情看起来很相似,它也完全不一样。
坦率地说,几乎所有试图在C++中模拟“属性语法”的方法都会以这样或那样的方式失败。大多数解决方案要么会耗费内存,要么会有一些限制,使它变得更麻烦而不是更有用。
只要学会与getter和setter共存就行了。Getter和setter是很好的实践。它们很短,很简单,很灵活,它们通常是很好的内联候选者,每个人都知道它们做了什么等等。
https://stackoverflow.com/questions/46275304
复制相似问题