首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >常量引用字段作为C++类中的只读属性

常量引用字段作为C++类中的只读属性
EN

Stack Overflow用户
提问于 2017-09-18 16:58:03
回答 1查看 2.8K关注 0票数 16

在C++类中使用常量引用字段作为只读getter方法好吗?

我的意思是,这段代码符合好的实践吗?

代码语言:javascript
复制
class check{
private:
    int _x;
public:
    const int& x = _x;
    void setX(int v){
        _x = v;
    }
};

它的工作方式非常类似于C#属性,IMHO,并且在类使用代码中非常简单和整洁:

代码语言:javascript
复制
  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';
EN

回答 1

Stack Overflow用户

发布于 2017-09-18 23:54:31

当C#编译一个属性时,它会被编译成一个getter和一个setter函数。

下面是一些C#代码,可以证明这一点:

代码语言:javascript
复制
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();
        }
    }
}

您的输出应为:

代码语言:javascript
复制
get_Prop
set_Prop
ToString
Equals
GetHashCode
GetType

get_Prop是实现getter的函数。set_Prop是实现设置器的函数。

所以,即使你正在做的事情看起来很相似,它也完全不一样。

坦率地说,几乎所有试图在C++中模拟“属性语法”的方法都会以这样或那样的方式失败。大多数解决方案要么会耗费内存,要么会有一些限制,使它变得更麻烦而不是更有用。

只要学会与getter和setter共存就行了。Getter和setter是很好的实践。它们很短,很简单,很灵活,它们通常是很好的内联候选者,每个人都知道它们做了什么等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46275304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档