首页
学习
活动
专区
工具
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 对象相加 // 全局函数 转为 成员函数 , 少了一个参数 // 两个 对象相加 , 最终结果累加到 本对象

20520
  • 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++ 新特性学习(五) — 引用包装、元编程类型属性和计算函数对象返回类型

    、(成员)函数(指针) 构造时必须传入所引用对象引用对象右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类引用类型 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++】构造函数分类 ② ( 不同内存创建类实例对象 | 栈内存创建实例对象 | new 关键字创建对象 )

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

    16520

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

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

    91710

    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.1K90

    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.3K31

    property属性相关小记

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

    1.1K20

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

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

    64230

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

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

    7410

    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定义属性称为存储器属性,它不同于数据属性,数据属性只是简单一个值。

    48240

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

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

    15530

    精选面试题教你应对高级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又强引用了该对象,就会发生循环引用

    53300

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

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

    80440

    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.5K30

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

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

    1.7K90

    大数据技术之_23_Python核心基础学习_03_函数 + 对象(12.5小时)

    . # 递归简单理解就是自己去引用自己! # 递归式函数函数自己调用自己!...# 创建一个列表 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 定义一个函数:可以将指定列表所有的偶数,保存到一个新列表返回 # 定义一个函数:这个函用来检查一个任意数字是否是偶数...#   - 需要提供一个 getter 和 setter 方法使外部可以访问到属性 #   - getter 获取对象指定属性(get_属性名),没有参数且有返回值 #   - setter 用来设置对象指定属性...getter 和 setter 方法,很好控制了属性是否是只读 #       如果希望属性是只读,则可以直接去掉 setter 方法 #       如果希望属性不能被外部访问,则可以直接去掉 ...,所以这些垃圾必须被及时清理 # 没用东西就是垃圾 # 程序没有被引用对象就是垃圾,这种垃圾对象过多以后会影响到程序运行性能,注意:垃圾对象:没有被引用对象,与该对象是否引用了其他对象无关

    1.2K20
    领券