首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

让所有setter函数在c ++中返回对象的引用是否很好?

在C++中,让所有setter函数返回对象的引用可以被认为是一种很好的做法。这种做法可以帮助开发者实现链式调用,提高代码的可读性和可维护性。

例如,假设我们有一个表示点的类,它有x和y两个坐标。我们可以为这个类定义一个setter函数,如下所示:

代码语言:cpp
复制
class Point {
public:
    Point& setX(int x) {
        this->x = x;
        return *this;
    }

    Point& setY(int y) {
        this->y = y;
        return *this;
    }

private:
    int x;
    int y;
};

现在,我们可以使用链式调用来设置点的坐标:

代码语言:cpp
复制
Point p;
p.setX(1).setY(2);

这种做法可以让代码更加简洁和易于阅读。

当然,也有一些异议认为,在某些情况下,返回对象的引用可能会导致一些问题,例如可能会导致对象被意外地修改。但是,如果开发者正确地使用这种做法,并且遵循一些良好的编程实践,那么这种做法可以带来很多好处。

总之,让所有setter函数在C++中返回对象的引用是否很好,取决于具体情况和开发者的实践。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

, 这个增加的参数是 对象本身的指针 ; 在 Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void..., 就是通过 this 指针隐藏左操作数 , 对象本身 就是 左操作数 , 在成员函数中 , 通过 this 指针访问对象本身的成员 ; 在全局函数中 , 实现两个 Student 类相加 , 接收两个...Student 引用类型的参数 , 引用相当于一级指针 ; // 全局函数中 , 将两个 Student 对象相加 // 引用的 等同于 一级指针 , Student 引用用法与 Student 对象用法相同...返回的是一个匿名对象 , 该匿名对象 是在 成员函数 中新创建的对象 ; // 成员函数中, 将两个 Student 对象相加 // 全局函数 转为 成员函数 , 少了一个参数 // 返回一个新..., 则返回 Student 引用即可 ; // 成员函数中, 将两个 Student 对象相加 // 全局函数 转为 成员函数 , 少了一个参数 // 两个 对象相加 , 最终结果累加到 本对象中

23820
  • C++ 新特性学习(五) — 引用包装、元编程的类型属性和计算函数对象返回类型

    、(成员)函数(指针) 构造时必须传入所引用的对象或引用对象的右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类的引用类型 get方法, 用于获取引用的对象...()操作符, 用于执行引用的函数 同时与其配对的函数有 std::ref 返回std::reference_wrapper,可以视为转换对象为引用 std::cref 返回常量引用对象std::reference_wrapper...,但是由于绑定变量和函数的参数类型推断是分离的,会导致传值而不是引用 另外有些函数,如 std::ptr_fun, 通过函数指针构造函数对象 std::mem_fun, 通过成员函数指针构造函数对象 std...(仿函数)的返回值类型 主要涉及一个模板函数std::result_of,它使用了decltype并支持函数对象(关于decltype请参见 https://www.owent.net/2011/508...也许是我还没能把C++用的非常灵活吧,感觉后面的部分不太实用的样子。 还需要继续努力啊

    1.3K30

    C++ 新特性学习(五) — 引用包装、元编程的类型属性和计算函数对象返回类型

    、(成员)函数(指针) 构造时必须传入所引用的对象或引用对象的右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类的引用类型 get方法, 用于获取引用的对象...()操作符, 用于执行引用的函数 同时与其配对的函数有 std::ref 返回std::reference_wrapper,可以视为转换对象为引用 std::cref 返回常量引用对象std::...,但是由于绑定变量和函数的参数类型推断是分离的,会导致传值而不是引用 另外有些函数,如 std::ptr_fun, 通过函数指针构造函数对象 std::mem_fun, 通过成员函数指针构造函数对象...(仿函数)的返回值类型 主要涉及一个模板函数std::result_of,它使用了decltype并支持函数对象(关于decltype请参见 https://www.owent.net/2011/508...也许是我还没能把C++用的非常灵活吧,感觉后面的部分不太实用的样子。 还需要继续努力啊

    1.8K30

    【C++】构造函数分类 ② ( 在不同的内存中创建类的实例对象 | 栈内存中创建实例对象 | new 关键字创建对象 )

    一、在不同的内存中创建类的实例对象 1、栈内存中创建实例对象 在上一篇博客 【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用...栈内存中的 变量 Student s1 ; 这些都是在 栈内存 中创建 类的实例对象 的情况 ; // 调用无参构造函数 Student s1; // 打印 Student s1 实例对象值..., 会自动将栈内存中的实例对象销毁 ; 栈内存中 调用 构造函数 创建的 实例对象 , 不需要关注其内存占用 ; 2、堆内存中创建实例对象 在 栈内存 中声明 类 的 实例对象 方式是 : 该 s1...实例对象存放在栈内存中 , 会占用很大块的栈内存空间 ; Student s1; 在 堆内存 中声明 类 的 实例对象 方式是 : 该 s2 实例对象是存放在堆内存中的 , 栈内存中只占 4 字节的指针变量大小...; Student* s2; 在 C++ 语言中 , 可以使用 new 关键字 , 调用有参构造函数 , 创建类的 实例对象 ; 在下面的 C++ 代码中 , 声明并定义了 MyClass 类 , 该类定义了一个有参构造函数

    18920

    C++ 虚函数详解:多态性实现原理及其在面向对象编程中的应用

    C++是一种面向对象的编程语言,在C++中,虚函数是实现多态性的关键 什么是虚函数 虚函数是一个在基类中声明的函数,它可以被子类重写并提供不同的实现。...注意,在Circle类中的重写函数中使用了override关键字,这是C++11中引入的新特性,表示该函数是对基类中同名函数的重写。...多态性的实现 当使用基类指针或引用来访问派生类对象时,如果虚函数已被重写,将调用派生类中的实现。这种行为称为运行时多态性,因为实际调用的函数是在运行时确定的。...在使用虚函数时,可以将基类指针或引用指向派生类对象,这样就可以实现多态性调用。...总结 虚函数是实现多态性的关键,它允许不同的对象表现出不同的行为。当使用基类指针或引用来访问派生类对象时,虚函数将调用派生类中的实现,实现了运行时多态性。

    1.1K10

    NLP研究者的福音—spaCy2.0中引入自定义的管道和扩展

    2.Property扩展:定义getter和可选的setter函数。 3.Method扩展:分配一个作为对象方法可用的函数。...接口可以将传递的Doc对象标准化,在需要时从它们中读取或写入。更少的特征使函数更容易复用和可组合。...在此之前,你通常会在文本上运行spaCy以获取您感兴趣的信息,将其保存到数据库中并在稍后添加更多数据。这样做没有问题,但也意味着你丢失了原始文档的所有引用。...在spaCy v2.0中,你可以很方便的在文档、token或span中写入所有这些数据自定义的属性,如:token._.country_capital,span._.wikipedia_url或doc....还可以实现对属性归类,在Doc和Span引用自定义Token属性,比如文档是否含有国家。

    2.2K90

    OC - 属性关键字和所有权修饰符

    2.修饰强引用,将指针原来指向的旧对象释放掉,然后指向新对象,同时将新对象的引用计数加1。3.setter 方法的实现是 release 旧值,retain 新值,用于OC对象类型。...这些关键字可以用于属性、方法返回值和参数中,来指定对象的可空性,这样编写代码的时候就会智能提示。在 Swift 中可以使用!和?...使用规范: 对于属性、方法返回值、方法参数的修饰,使用:nonnull/nullable; 对于 C 函数的参数、Block 的参数、Block 返回值的修饰,使用:_Nonnull/_Nullable...1.ARC 中为了避免循环引用而使用,可以让相互引用的对象中的一个使用weak/__weak弱引用修饰,常用于对delegate和block的修饰; 2.Interface Builder 中 IBOutlet....相同点:在修饰对象的时候,assign和weak都不改变对象的引用计数。

    1.4K31

    《你不知道的JavaScript(上)之原型对象》读书笔记

    new的工作原理:1.创建一个空对象,构造函数中的this会指向这个对象2.这个新对象会被链接到原型3.执行构造函数方法,其属性和方法都会被添加到this引用的对象中4.如果构造函数中没有返回新对象,那么返回...this,即创建新对象;否则,返回构造函数中返回的对象。...对象默认的内置 [[Get]] 操作首先在对象中查找是否有名称相同的属性, 如果找到就会返回这个属性的值。...中的显式定义,二者都会在对象中创建一个不包含值的属性,对于这个属性的访问会自动调用一个隐藏函数,它的返回值会被当作属性访问的返回值。...,这个属性引用的是对象关联的函数(本例中是 Foo)。

    65130

    property属性相关小记

    当多线程环境下同时调用一个setter时,可能会出现无法获取完整的数据。使用atomic属性时,则会一个线程在执行完setter全部语句前,不会让另一个线程开始执行setter,以此保证数据完整性。...在释放时,调用clearDeallocating函数。该函数首先根据对象地址获取所有weak指针地址的数据,然后遍历数据把其中的数据置为nil,最后把记录从weak表中删除,清理对象的记录。...原理:weak对象会放入一个hash表中,用weak指向的对象内存地址作为key,因此该对象引用计数为0时就回dealloc,在hash表中找到所有以该对象内存地址为key的weak对象,从而置为nil...从weak表中获取废弃对象的地址为键值的记录 b. 将包含在记录中的所有附有 weak修饰符变量量的地址,赋值为 nil c. 将weak表中该记录删除 d....重写只读属性的getter时; 重写setter和getter时 使用了@dynamic时 @protocol中定义了所有属性时 在category定义了所有属性时 重载了属性时 能否向编译后的类中添加实例变量

    1.1K20

    理论+实践:从原型链到继承模式,掌握 Object 的精髓(二)

    在之前的文章中我们说过,当视图引用对象的属性时会触发 [[Get]] 操作,比如 myObject.a。对于默认的 [[Get]] 操作来说,第一步是检查对象本身是否有这个属性,如果有的话就使用它。...而在上述代码中的 constructor 属性引用的是对象关联的函数(上述代码中是 Foo)。...而这个调用时一个构造函数调用,但 NothingSpecial 本身并不是一个构造函数。 • 在 JavaScript 中对于构造函数最准确的解释是,所有带 new 的函数调用。...,因为是空的,所有无法进行委托,并且由于这个对象没有原型链,在使用 instanceof 时也就无法进行判断,因此他们总是会返回 false。...Object.create(null) 会创建一个空链接的对象,因为是空的,所有无法进行委托,并且由于这个对象没有原型链,在使用 instanceof 时也就无法进行判断,因此他们总是会返回 false

    9210

    JS学习笔记 (三) 对象进阶

    2、所有通过对象字面量创建的对象都具有同一个原型对象,可通过Object.prototype获得原型对象的引用。...3、通过new和构造函数创建的对象的原型就是构造函数的prototype属性引用的对象。...如果o中不存在p,而且没有setter方法可供调用,则p一定会添加至o中。但如果o不是可扩展的,那么在o中不能定义新属性。 1.4.5 删除属性方法 delete运算符可以删除对象的属性。...输出结果: [ ‘c’, ‘d’ ] 4、Object.getOwnPropertyNames(),它和Ojbect.keys()类似,只是它返回对象的所有自有属性的名称,而不仅仅是可枚举的属性。...在es5中,属性值可以被getter和setter两种方法替换,由getter和setter定义的属性称为存储器属性,它不同于数据属性,数据属性只是简单的一个值。

    49540

    精选面试题教你应对高级iOS开发面试官(提供底层进阶规划蓝图)

    时 在@protocol中定义的所有属性 在category中定义的所有属性 重载的属性,当在子类中重载了父类中的属性,必须使用@synthesize来手动合成ivar objc中向一个nil对象发送消息将会发生什么...在objective-C中向nil 发送消息是完全有效的—只是在运行时不会有任何作用如果一个方法返回值是一个对象,那么发送给nil的消息将返回o(nil),如果向一个nil对象发送消息,首先在寻找对象的...C++的实例变量们(ivars)调用destructors 为ARC 状态下的实例变量们(ivars)调用-release*解除所有使用runtime Associate方法关联的对象 解除所有_weak...通过retaincount 的机制来决定对象是否需要释放。...使用block时什么情况会发生引用循环,如何解决? 一个对象中强引用了block,在block中又强引用了该对象,就会发生循环引用。

    55100

    尝试Java,从入门到Kotlin(上)

    事实上,Java的Lambda函数是一个满足Functional Interface接口的对象。比如下面代码,声明了一个具有一个int参数,返回一个int参数的函数。...另一方面,编译器也无法检测出是否可能会抛出RuntimeException。无论采用哪种方案,都使得这个Lambda函数变得没那么好看。 泛型 Java的泛型原理和C#不同。...在C#中,我们可以有这样的Json反序列化方法: T parse(string jsonStr) 这个方法将jsonStr反序列化为类型T的一个对象。这种写法看起来十分自然。...然而在Java中无法实现。因为在parse方法中需要在运行时实例化T的一个对象,而Java在运行时这些泛型都已经被擦除,无法获取类型T的信息,从而无法实例化。...Getter/Setter 在面向对象哲学中,字段属于实现细节,应该设为private使它隐藏在类的内部。但是在实际中,有很多字段需要直接访问和修改。

    16730

    Java 反射 VS Kotlin 反射

    Kotlin 的引用类有两种方式:类名::class和对象::class,它们获取的都是相同的 KClass 实例。 即处于同一个类加载器中,给定的类型只能返回一个 KClass 实例。...构造函数引用,获取类的构造函数 Java 获取类的构造函数 Java 在获取 Class 实例之后,可以获取其中的构造函数。...// 类中声明的所有构造函数。 public val constructors: Collection> Kotlin 通过::操作符并添加类名来引用构造函数。...public Method[] getDeclaredMethods() // 如果此 Class 对象表示某一方法中的一个本地或匿名类,则返回 Method 对象,它表示底层类的立即封闭方法。...Kotlin 和 Java 的方法引用使用::操作符,Kotlin 除了可以引用类中成员函数、扩展函数还可以引用顶层(top-level)函数。

    2.6K30

    iOS @property探究(一): 基础详解你要知道的@property都在这里

    setter方法是有一个参数的无返回值方法,getter方法是没有参数的且有一个返回值的方法,返回值类型与属性声明的类型一致。...或者,你也可以使用Xcode中的modern Objective-C转换器来自动转换你的代码。参考Refactoring Your Code Using Xcode。...可以发现几乎所有代码的属性设置都会使用nonatomic,这样能够提高访问性能,在iOS中使用锁机制的开销较大,会损耗性能。...Foundation框架中的很多数据类型已经帮我们实现了上述两个方法,因此我们可以使用copy方法和mutableCopy方法来复制一个对象,两者的区别在于copy的返回值仍未不可变对象,mutableCopy...的返回值为可变对象。

    1.7K90

    Spring框架参考手册_5.0.0_中文版_Part II_3.4

    3.4.1 依赖注入 依赖注入(DI)是一个处理过程,凭借对象之间依赖关系,也就是和它们一起工作的其它对象,只能通过构造函数参数,传递参数给工厂方法,在构造完成或工厂方法返回的对象实例之后再设置对象实例的属性...你可以混合使用基于构造函数的依赖注入和基于setter的依赖注入,强制依赖使用构造函数注入,可选依赖使用setter方法或配置方法注入是一个很好的经验法则。...注意在setter方法上使用@Required注解会检查依赖是否注入。 当实现的应用组件是不可变对象时,Spring团队通常主张构造函数注入,这样可以确保所需的依赖非空。...(如果协作bean是一个单例模式的bean,它可能已经被容器初始化了。)所有引用bean根本上都是另一个对象的引用。...通过标签的bean属性指定目标bean是最常用的形式,允许创建同容器或父容器中任何bean的引用,不管它是否是在同一个XML文件中。

    81240
    领券