RHZ'S BLOG | 个人分享

  • 首页
  • 笔记
  • 小日常
  • 音乐
  • 读书
  • 软件分享
YOLO
  1. 首页
  2. 笔记
  3. C/C++
  4. 正文

This 关键词|C++

2022年9月17日 109点热度 0人点赞 1条评论

This

C++ 中的每个对象都可以通过称为 this 指针访问自己的地址。

在成员函数内部,这可以用来引用调用对象。

我们来创建一个示例类:

class MyClass {
 public:
  MyClass(int a) : var(a)
  { }
 private:
  int var;
};

友元函数没有这个指针,因为友元不是一个类的成员。

注:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。

printInfo() 方法为打印类的成员变量提供了三种选择。

class MyClass {
 public:
  MyClass(int a) : var(a)
  { }
  void printInfo() {
   cout << var<<endl;
   cout << this->var<<endl;
   cout << (*this).var<<endl; 
  }
 private:
  int var;
};

所有三种选择将产生相同的结果。

this 是一个指向对象的指针,所以使用箭头选择操作符来选择成员变量。

This 关键词|C++插图

为了看到结果,我们可以创建我们的类的一个对象,并调用成员函数。

#include <iostream>
using namespace std;

class MyBlog{
public:
    MyBlog(string a): name(a)
    {}
    void printInfo(){
        cout <<name <<endl;
        cout <<this->name <<endl;
        cout <<(*this).name <<endl;
        cout <<this->getname() <<endl;
        cout <<(*this).name <<endl;
    }
    string getname(){
        return name;
    };
private:
    string name;
};
int main()
{
    MyBlog rhz("RHZ的博客");
    rhz.getname();
    rhz.printInfo();
}
/* Outputs
RHZ的博客
RHZ的博客
RHZ的博客
RHZ的博客
RHZ的博客
*/

所有这三种访问成员变量的方式都起作用。

请注意,只有成员函数有一个 this 指针。

你可能想知道为什么要使用 this 关键字,因为我们可以用直接选择变量名的方式来进行访问。

实际上,这个关键字在操作符重载中起着重要的作用,这将在下一篇文章(操作符重载|C++)中介绍。

This 关键词|C++插图1
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年9月17日

RHZ

即使单枪匹马,我亦勇敢无畏

点赞
< 上一篇
下一篇 >

文章评论

  • 头像
    כנסו לאתר

    Everything is very open with a really clear clarification of the challenges. It was really informative. Your website is extremely helpful. Thank you for sharing!

    2022年9月20日
    回复
  • 取消回复
    归档
    • 2023年2月
    • 2022年12月
    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年7月
    • 2022年6月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年2月
    • 2021年12月
    • 2021年11月
    • 2021年10月
    • 2021年8月
    • 2021年7月

    COPYRIGHT © 2022 RHZ的博客. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    渝ICP备2022008933号-1