- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
A.以下通过返回引用对 getter 和 setter 使用相同函数的技巧有多有用/麻烦?
B.在 getter 和 setter 的情况下,在函数声明末尾添加 const 的做法有多好?
#include <iostream>
class A
{
int varReadWrite_;
int varReadOnly_;
int varRestricted_;
public:
A() : varReadOnly_(25) {}
virtual ~A() {}
int& varReadWrite() { return varReadWrite_; }
int varReadOnly() { return varReadOnly_; }
int varRestricted() { return varRestricted_; }
void setVarRestricted(int i); //throwable
};
int main(int argc, char *argv[])
{
A a;
a.varReadWrite() = 45;
std::cout << a.varReadOnly() << a.varReadWrite() << std::endl;
return 0;
}
我选择这个设计的原因是:
使用 boost fusion map也是一个有趣的可能性,因为 shown here
更新
Const 引用成员对变量的只读访问很有趣,例如
class A {
int mA;
public:
int& a;
A(int a_ = 0) : mA(a_), a(mA) {}
};
实际上,这伴随着编写复制和移动构造函数的额外工作,对我来说这是一个可以接受的妥协。
Cpp Reference Copy Construtor says
The implicitly-declared or defaulted copy constructor for class T is defined as deleted if... T has non-static data members that cannot be copied (have deleted, inaccessible, or ambiguous copy constructors);
最佳答案
A. How useful/cumbersome is the following trick of using the same function for getter as well as setter, by returning a reference?
通常不推荐返回对内部成员的引用,因为这样您可以轻松访问其他人,这样他们就可以更改您的对象内部状态,而无需使用对象类 API 提供的任何方法.因此,很难跟踪代码中的此类更改。一般来说,对象内部状态的更改只能通过属于类 API 的方法实现。
B.在 getter 和 setter 的情况下,将 const 添加到函数声明末尾的做法有多好?
如果您指的是为以下方法添加常量:
void PrintState() const
那么一般来说这对 setter 来说没有意义。在这种情况下,Const 意味着此方法不会更改对象状态。因此,您向调用者 promise 说:我不会通过这次调用更改对象状态。一般来说,这是非常好的做法,因为它可以帮助您在设计期间考虑您的方法并查看哪个方法真正修改了对象状态。此外,它是一种防御性编程,因为它是递归的:如果你通过引用(通过指针或引用)将这个对象传递给某个方法,他不能调用 const 方法,除非这个方法也被标记为 const。因此,这可以防止错误地更改对象状态。
关于c++ - 二传手的引用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32795005/
我是 Scala 的新手,具有基本的 Java 背景。我研究了如何实现类构造函数以及如何在 setter 中为该类的字段提供一些逻辑。 class SetterTest(private var _x:
我想知道的是,当我们可以简单地将值直接分配给私有(private)对象时,为什么我们需要私有(private) setter?考虑以下代码: private int counter = 0; publ
我试图为 recordingStatus 赋值 -即recordingStatus = 1但它没有进入我想要一些自定义代码的 setter ..我的代码有什么问题? 谢谢。 码头。 在文件.h中 @p
仍在习惯 Entity Framework ,但我已经看到如下代码,它们在实体中为 id 设置了私有(private) setter 。 public int Id { get; private se
省略 setter 的属性和带有私有(private) setter 的属性有什么区别? public string Foo { get; private set; } 对比 public strin
我不明白拥有以 C# 2 开头的私有(private) setter 的必要性。 对我来说有一个 setter 方法就是让用户在那个类中设置一些变量。这样做时,我们不会将变量直接暴露给用户。相反,我们
我有一个 QObject,其属性可从 QML 访问。 就像是: Class C : public QObject { Q_OBJECT public: explicit C(QObject * par
有没有办法在 TypeScript 中为属性设置私有(private) setter? class Test { private _prop: string; public get p
我一直在寻找,但找不到任何相关的引用资料。我想在 Dart 中创建一个私有(private) setter,以便在更改私有(private)变量后调用附加函数。 ViewState _state; V
这是由apple提供的pint结构setter getter介绍的point example如何让只有二传手私有(private) struct Point { var x = 0.0, y
我编写了一个自定义序列化程序,它通过反射设置对象属性来工作。可序列化类使用可序列化属性进行标记,所有可序列化属性也进行标记。例如,下面的类是可序列化的: [Serializable] public c
我知道有一个属性可以处理私有(private) setter ,但我有点希望将此行为作为默认行为,有没有办法实现这一点?除了调整来源。如果有这样的设置就好了。 最佳答案 我来这里是为了寻找使 Json
我是一名优秀的程序员,十分优秀!