引用与this指针

引用与this指针

在C++编程中,引用和this指针是两个重要的概念,也是在前期学习之中较难理解的一个点,它们在对象和函数之间的交互中起着至关重要的作用。

引用

在C++中,引用是一种用于别名变量的机制。引用允许我们创建一个变量的别名,这意味着该引用变量将与原始变量共享相同的内存地址。引用提供了一种更直接的方法来操作变量,而无需复制数据,从而提高了程序的效率和简洁性。

1.声明引用:

使用&符号来声明引用。例如:

   int original = 10;
   int &ref = original;
2.别名:

引用的本质其实就是跟变量起了一个别名,举个例子,有一个学生叫张三,那么同学们喊他张三,他的老师可能会喊他小张,他的女朋友可能喊他宝贝(如果他有女朋友的话)等等,但是,我们发现,这么多不同的昵称,最后都指向了张三这个人,引用也是这个道理。引用提供了变量的另一个名称,因此在使用引用时,我们可以像使用原始变量一样使用它,而不必担心指针的复杂性。

3.引用必须初始化:

引用在声明时必须初始化(在C++中初始化引用的时候,必须将引用绑定到一个对象,而不是字面量或表达式的结果),并且不能更改引用的目标。例如:

   int original = 10;
   int &ref = original; // 正确
   int &ref1 = 1; //错误,将引用ref1绑定到一个临时值1上,而不是变量。
   int &ref2; // 错误,引用必须初始化
4.引用传参:

引用通常用于函数参数传递,可以通过引用修改原始变量的值,而不是创建副本。这可以提高函数的性能和效率。例如:

void increment(int &num) {
       num++;
   }
5.引用与指针的区别:

1.引用必须在声明时初始化,而指针可以在稍后指向其他对象。
2.引用不能指向空值,而指针可以为空。
3.引用一旦绑定到对象,就无法重新绑定到另一个对象,而指针可以随时重新赋值指向其他对象。

6.引用的应用:

1.函数参数传递:通过引用传递参数,可以避免拷贝大型对象的开销。
2.返回引用:函数可以返回引用,使得返回值可以被修改。
3.在类中使用:引用可以作为类成员,用于操作类的数据成员。

this指针

在C++中,this 指针是一个特殊的指针,它指向当前对象的地址。这个指针允许在类的成员函数中访问对象的成员变量和成员函数。

this指针的作用

this 指针的主要作用是允许在类的成员函数中引用调用该函数的对象。每个对象都有自己的 this 指针,它指向对象的地址,从而使成员函数能够访问对象的成员变量和其他成员函数。还以学生张三举个例子,张三作为学生类的一个对象,他的地址就是他的宿舍号加床号,也就是说,张三的this指针就指向他的宿舍号和床号,方便我们找到他,对他进行一些访问或者操作。

1.避免命名冲突

this 指针在成员函数中起到了隐式参数的作用。当成员函数的参数和成员变量同名时,可以使用 this 指针来区分它们,避免命名冲突。

class MyClass {
private:
 int value;

public:
    void setValue(int value) {
        this -> value = value; // 使用 this 指针避免命名冲突,这句话的意思实际上是把传入的value用于对象的初始化
        //this指针指向的value代表对象的属性value,赋值后面的value代表传参传入的value
    }
};
2.在成员函数中返回对象本身

在某些情况下,成员函数需要返回对象本身,以便支持链式调用。这通常在实现一些操作符重载时非常有用。

class MyNumber {
private:
    int value; // 私有成员变量,用于存储整数值

public:
    // 构造函数,初始化对象的状态
    MyNumber(int val) : value(val) {}

    // 成员函数,用于将传入的整数值加到当前对象的 value 成员变量上,并返回对象本身的引用
    MyNumber &add(int num) {
        value += num; // 将传入的整数值加到当前对象的 value 成员变量上
        return *this; // 返回对象本身的引用,允许链式调用
    }
};

上述例子中,我们定义了一个能够存储整数值的类 MyNumber,并实现了一个可以连续对其进行加法操作的成员函数 add。add 函数返回 *this,允许对同一个对象进行连续的 add 操作。

一些注意事项
静态成员函数

在静态成员函数中,因为静态成员函数不属于任何实例对象,所以无法使用 this 指针。

class MyClass {
public:
 static void staticFunction() {
     // 不能使用 this 指针
 }
};
避免悬空指针

使用 this 指针时,要确保对象存在。避免在对象生命周期结束后仍然使用 this 指针,以防止产生悬空指针。

(今天才发现md编辑器CPP和C++导入结果不一样,我还寻思为啥之前的文章代码都没高亮…)

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运算符重载是指在类中对C++内置运算符进行重新定义的过程,使得运算符能够适用于类对象。C++中的运算符重载可以通过成员函数和非成员函数两种方式实现。 this指针是一个指向当前对象的指针,它在成员函数中使用。在运算符重载中,this指针可以用来引用当前对象的成员变量和成员函数。 例如,在一个矩形类中重载“+”运算符,可以通过以下两种方式实现: 1. 成员函数方式: ```c++ class Rectangle { public: int width, height; Rectangle operator+(const Rectangle& other) { Rectangle result; result.width = this->width + other.width; result.height = this->height + other.height; return result; } }; ``` 在上述代码中,重载了“+”运算符,并使用了成员函数的方式实现。在函数中使用了this指针引用当前对象的成员变量。 2. 非成员函数方式: ```c++ class Rectangle { public: int width, height; }; Rectangle operator+(const Rectangle& r1, const Rectangle& r2) { Rectangle result; result.width = r1.width + r2.width; result.height = r1.height + r2.height; return result; } ``` 在上述代码中,重载了“+”运算符,并使用了非成员函数的方式实现。在函数中没有使用this指针,而是直接引用了两个参数对象的成员变量。 总结:运算符重载中可以使用this指针引用当前对象的成员变量和成员函数。但是,在非成员函数的方式中无法使用this指针,需要通过参数来引用对象的成员变量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值