当前位置:主页 > c/c++教程 > 类this及返回自身对象的引用

C++ 类this及返回自身对象的引用方式

发布:2023-03-11 14:00:01 59


我们帮大家精选了相关的编程文章,网友史清雅根据主题投稿了本篇教程内容,涉及到C++、类this、C++返回自身对象、C++对象引用、类this及返回自身对象的引用相关内容,已被642网友关注,涉猎到的知识点内容可以在下方电子书获得。

类this及返回自身对象的引用

this及返回自身对象的引用

this:调用成员函数的时候,编译器负责把对象地址传(&myTime)递给成员函数中隐藏的this形参。

在系统角度来看,任何对类成员的直接访问都是被this隐式调用的。

  • this有个const修饰符,只能用来指向已确定的那个对象,不能更改。
  • this只能在成员函数中使用,全局函数静态函数不能使用this。
  • 在成员普通函数中,this是一个指向非const对象的const指针。(this 等价于 Time *const this,const修饰this,this不能指向其他对象,但this指向的对象中的成变量可以被修改。)
  • 在const成员函数中,this指针是一个指向const对象的const指针(this 等价于 const Time * const this)。
class Time {
public:
    int hour;
    int minute;
public:
    //把对象自己返回去了
    Time& add_hour(int temp_hour);
    Time& add_minute(int minute);
};
//实际工作中,this能省则省。
Time& Time::add_hour(int temphour)  {
    this->hour += temphour;//等价于 hour += temphour;
    return *this;//把对象自己返回去了,固定写法。指向本对象的指针。*this表示对象本身。
}
Time& Time::add_minute(int minute) {
    this->minute += minute;//区分成员变量和形参
    return *this;
}
    Time myTime;
    myTime.add_hour(3);
    myTime.add_hour(3).add_minute(10);//返回自己,可以连续调用。

c++如何返回对象

返回对象,无非两种方式,返回栈对象和堆对象指针,栈对象指针不能返回,因为可能使用不该使用的内存,堆对象也不能直接返回,因为会产生内存泄漏。下面,我们分析两种返回方式的优缺点,及针对缺点的解决方案。

这里有个注意点,返回this指针指向的自身对象时,可以返回引用。

返回栈对象

  • 优点:不用手动释放内存,避免了内存泄漏;
  • 缺点:会产生对象拷贝,如果对象比较大,比如,对象里面有大数组,会产生性能开销。

返回堆对象指针

  • 优点:不会产生对象拷贝,对性能友好;
  • 缺点:函数调用之后手动释放对象,代码管理难度和内存泄漏风险提高。

那有没有办法,把上面的缺点全克服了呢?有!

  • 返回栈对象:用移动构造函数减少大对象拷贝;
  • 返回堆指针:借助智能指针,避免内存泄漏。

注意:返回栈对象时,虽然很多编译器做了编译优化,即使不写移动构造函数,也不会产生对象拷贝,但是,为了应对还没有编译优化的编译器,建议写好移动构造函数。

可以看下面代码。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持码农之家。


参考资料

相关文章

  • 图文详解Python中如何简单地解决Microsoft Visual C++ 14.0报错

    发布:2023-04-10

    有的时候安装python依赖包的时候,报错信息"Microsoft visual c++ 14.0 is required"的解决办法,下面这篇文章主要给大家介绍了关于Python中如何简单地解决Microsoft Visual C++ 14.0报错的相关资料,需要的朋友可以参考下


  • C++11, 14, 17对tuple元素的访问详情

    发布:2023-03-10

    这篇文章主要介绍了C++11, 14, 17对tuple元素的访问详情,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • C++ 右值引用与 const 关键字详解

    发布:2023-03-03

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,const关键字是一种修饰符,这篇文章主要介绍了C++ 右值引用与 const 关键字,需要的朋友可以参考下


  • C++ Boost Bimap示例详细讲解

    发布:2023-03-09

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称


  • C++ Boost MultiArray简化使用多维数组库

    发布:2023-03-08

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称


  • 获取C++变量类型的简单方法

    发布:2023-03-02

    这篇文章主要介绍了获取C++变量类型的简单方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • C++类的成员初始化列表的相关问题总结

    发布:2021-05-17

    下面小编就为大家带来一篇关于C++类的成员初始化列表的相关问题。小编觉得挺


  • Java C++题解 leetcode第k个数实例

    发布:2023-03-02

    这篇文章主要为大家介绍了Java C++题解 leetcode第k个数实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


网友讨论