博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++之this指针
阅读量:4299 次
发布时间:2019-05-27

本文共 1092 字,大约阅读时间需要 3 分钟。

this指针是类的普通成员函数的隐含形参,只能在成员函数中使用,指向调用该成员函数的实例地址,当形参与成员变量重名时,我们可以通过this指针加以区分。

#include 
using namespace std;class A {public: int a; A* set(int a){ this->a = a; return this; }};int main() { A a={
0}; cout<<&a<

运行结果:

0x28ff2c00x28ff2c1

我们知道同一类的不同实例所调用的同一成员函数只有一份,保存在代码区,通过隐含形参this来对不同的类加以区分。在下面的代码中,我们声明一个类的空指针,并调用成员函数,此时,该指针并没有指向实例地址,即没有分配栈区内存,但我们依旧可以调用位于代码区的成员函数,只是在该函数中,this指针为NULL,若指向普通成员变量就会运行错误,但是可以指向静态成员变量,这是由于静态成员变量在程序启动时就分配空间,位于在全局数据,且静态成员变量只有一份拷贝,为所有实例共享。

#include 
using namespace std;class A {public: int a; static int b; A* set(){// this->a = 1; // 错误 this->b = 1; return this; }};int A::b = 0;int main() { A *pa=NULL; cout<
<
b<
set()<
b<

运行结果:

0001

我们知道,在静态成员函数中不能使用this指针,也不能访问非静态成员变量,当静态成员函数的形参与静态成员变量同名,我们可以通过<类名>::<静态成员变量>的方式访问静态成员变量。

#include 
using namespace std;class A {public: static int a; static void set(int a){ A::a = a; }};int A::a = 0;int main() { cout<
<

运行结果:

01

转载地址:http://pqsws.baihongyu.com/

你可能感兴趣的文章
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
全面理解Java内存模型
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>