C++—this指针的用法

this指针抽象比喻

当我们在进入一个房子之后, 可以看见房子里的桌子,椅子、 地板等,但是看不到房子的全貌。对于一个类的实例来说, 你可以看到它的成员 函数、 成员 变量, 但是实例本身呢? this是一个指针, 它时时刻刻指向这个实例。

一个对象的多个成员就可看作是这个对象所拥有的桌子,椅子、 地板等;而在很多个对象中间,我们为了证明某个成员是自己的成员,而不是其他对象的成员,我们同样需要给这些成员取上名字。在C++中,我们利用this指针帮助对象做到这一点his指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员。

程序例程

话不多说我们通过一个程序来体现this指针的实际用处:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string.h>

using namespace std;

class Student
{
public:
    void Initstudent(char* name, char* gender, int age)
    {
        cout << "this指针保存的地址为:"<< this << endl;
        strcpy(this->_name, name);
        strcpy(this->_gender, gender);
        this->_age = age;
    }

private:
    char _name[20];
    char _gender[15];
    int _age;
};

结果显示如下:

通过这个输出结果,我们可以看到,对象S1、S2、S3、的内存地址和this指针的地址分别是一模一样的。这就说明了this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象!

在程序里,我们就用了this指针的这个属性,即:this->i=x;这句话就表示把x的值赋值给当前的对象的私有成员函数i。

this指针特性详解 :

1、 this指针的类型  类类型* const

2、 this指针并不是对象本身的一部分, 不影响sizeof的结果。

3、 this的作用域在类成员 函数的内部(不严谨) 。

4、 this指针是类成员 函 数的第一个默认隐含参数, 编译器自 动维护传递,类编写者不能显式传递。

5、 只 有在类的非静态成员 函 数中 才可以 使用 this指针,其它任何函数都不可以 。

this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说, 即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。

this指针的使用

一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;

另外一种情况是当参数与成员变量名相同时,如this->n = n 。

时间: 2024-12-29 06:41:23

C++—this指针的用法的相关文章

C中函数指针的用法

理解了C中的声明和指针的话题后再来看函数指针的用法就很容易了. C中函数指针主要有两个用途: 1.作为参数传递给另外一个函数(即作为回调函数) 2.转换表(jump table) 下面分别来介绍作为回调函数的用法和作为转换表的用法 1.回调函数 在链表的查找中使查找函数与类型无关 /*在一个单链表中查找一个指定值的函数.它的参数是一个指向链表第一个节点的指针 * 一个指向我们需要查找的值的指针和一个函数指针,它所指向的函数用于比较存储于链表中的类型的值*/ #include <stdio.h>

函数指针的用法

函数指针试吃由于函数地址的指针.针织能够指向函数对于C/C++来说很重要也很有用,这为我们编译时未确定的顺序呢执行函数提供了另一种选择,而不需要使用条件语句. 1.声明函数指针 void (*foo)(); int (*f1)(double);//传入double,返回int void (*f2)(char*);//传入char*指针,没有返回值 double* (*f3)(int,int);//返回double指针 如果去掉第一对括号就成了返回 void* 的函数了! 下面的例子就是返回指针的

《C++ Primer》学习 之 函数指针相关用法

/* 函数指针相关用法*/ 1 #define _CRT_SECURE_NO_WARNINGS 2 #define HOME 3 //#define NDEBUG 4 #include <iostream> 5 #include <stdexcept> 6 #include <cassert> 7 #include <ctype.h> 8 #include <locale> 9 #include <iterator> 10 #incl

c++指针各种用法小结

指针各种用法小结 1.int*p; 一般指针. 2.int (*p)[M]; p指向含有M个元素的一维数组,可指向每行含有M个元素的二维数组的一行(行指针). 3.int * p[M]; p是指针数组,含有M个元素,每个元素都是整形指针.p的类型是int *[]. 4.int **p; p是指向整型指针的指针. 5.int (*p)(int,int); p是一个函数指针. 6.int *f(……); 这是一个函数定义(指针函数),返回值为int *. 7.void类型指针 1)任何类型的指针都可

C#中this指针的用法示例

这篇文章主要介绍了C#中this指针的用法,对初学者而言是非常重要的概念,必须加以熟练掌握,需要的朋友可以参考下. 本文实例展示了C#中this指针的用法,对于初学者进一步牢固掌握C#有很大帮助,具体内容如下: 一.this指针是什么: 这里有一些面向对象编程的概念需要说明:类(Class)的概念和对象(Object)的概念类是对事物概括,也是C#编码时所有代码归属的基本单位:而对象是对类的实例化,也就是C#里new方法的返回值.写代码是不能直接用操作类,而只能先实例化类,然后我们用这个类被实例

C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论

今天做一个成绩管理系统的并发引擎,用Qt做的,仿照QtConcurrent搞了个模板基类.这里为了隐藏细节,隔离变化,把并发的东西全部包含在模板基类中.子类只需注册需要并发执行的入口函数即可在单独线程中执行.最终目标是,继承的业务逻辑类外部调用时有两个接口可选,调用syncRun同步执行:调用由引擎自动生成的asyncRun就异步执行.最终自动生成asyncRun的模板基类没能实现,主要原因是mingw对this处理的太有问题了!!原本以为编译器问题,后来才知道成员函数指针和this指针如此特殊

第22篇 js中的this指针的用法

前面把js的相关知识总结了下,今天把js中的上下文的this,对于强类型语言,this的用法非常的单一,因为他们没有js特有的动态绑定. 首先看下面代码: function funcA() { this.name = "hello"; console.log(this.name); this.show = function() { console.log(this.name); } } funcA();// 1.hello var a = new funcA();//2.hello a

智能指针unique_ptr用法

unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_ptr<T> myPtr(new T); std::unique_ptr<T> myOtherPtr = myPtr; // error 但是unique_ptr允许通过函数返回给其他的unique_ptr,还可以通过std::move来转移到其他的unique_ptr,注意,这时它本身就

指针的用法

大家都应该知道, 指针是个什么玩意儿, 它就是用来存另一个变量的地址的.这玩意儿在程序中容易引起不易察觉的错误, 而且会给调试带来莫大的困难. 尽管如此,它现在依然存在着, 这就从另一方面说明了, 它的功能爆表. 在实现链式存储, 图, 树, 森林时, 大都要用指针. 不仅如此, 在访问多维数组,函数参数传递时, 也多用指针.下面给出指针的一些常用的用法代码. /*指针的声明及一般用法*/ /*___________________________________________________

C函数指针的用法

1.最简单的用法: 1 #include <cstdio> 2 3 int (*p)(int);//定义一个函数指针变量p(下面的f其实是一个常量函数指针) 4 int f(int x) 5 { 6 printf("%d\n",x+2); 7 return 0; 8 } 9 10 int main() 11 { 12 p=f; 13 p(2);//等价于f(2) 14 return 0; 15 } 还有另一种对应写法,不过实在不喜欢,可以忽略.简单来说,就是f()与(*f)