C++_自引用指针this
自引用指针this
例 3.1 this指针的引例
#include<iostream.h>
class A{
public:
A(int x1){ x=x1; }
void disp(){ cout<<"x= "<<x<<endl;}
private:
int x;
};
main()
{
A a(1),b(2);
cout<<" a: "; a.disp();
cout<<" b: "; b.disp();
return 0;
}
程序运行的结果:
a: x=1
b: x=2
理解this
- 每一个类的成员函数都有一个隐藏定义的常量指针,我们把它称为this指针。
- this指针的类型就是成员函数所属的类的类型。
- 每当调用成员函数时,它被初始化为被调函数所在类的对象的地址。也就是自动地将对象的指针传给它。不同的对象调用同一个成员函数时,编译器将根据成员函数的this指针所指向的对象来确定应该引用哪一个对象的数据成员。
- 在通常情况下,this指针在系统中是隐含地存在的。也可以将其显式地表示出来。
cout<<“x=”<<this->x<<endl;
例3.2 显示this指针的值。 (显式)
#include<iostream.h>
class A{
public:
A(int x1){ x=x1;}
void disp(){cout<<"\nthis="<<this<<"when x="<<this->x;}
private:
int x;
};
main()
{
A a(1),b(2),c(3);
a.disp();
b.disp();
c.disp();
return 0;
}
this=0x0065FDF4 when x=1
this=0x0065FDF0 when x=2
this=0x0065FDEC when x=3
【例3.3】 分析下列程序的运行结果,说明程序中this和*this的用法
#include<iostream.h>
class Sample{
private:
int x,y;
public:
Sample(int i=0,int j=0)
{ x=i; y=j; }
void copy(Sample& xy);
void print()
{ cout<<x<<","<<y<<endl; }
};
void Sample::copy(Sample& xy)
{
if (this==&xy) return;
*this=xy;
}
void main()
{
Sample p1,p2(5,6);
p1.copy(p2);
p1.print();
}
运行结果:
5,6
例.一个使用this的类
class Circle{
private:
double radius;
public:
Circle(double radius) // 参数与数据成员同名时
{
this->radius = radius; // 去掉 this 如何理解?
} // P272.例9.5中形式参数为何取 nam ?
double get_area()
{
return 3.14 * radius * radius;
}
};
int main()
{
Circle c = Circle(1);
double a = c.get_area();
cout << a << endl;
return 0;
}
说明:
- this指针是一个const指针,不能在程序中修改它或给它赋值。
- this指针是一个局部数据,它的作用域仅在一个对象的内部。
(1) 隐式存在
this指针是隐式使用的,它是作为参数被传递给成员函数的。
(2)自动实现
是编译系统自动实现的,程序设计者不必人为地在形参中增加this指针,也不必将对象a的地址传给this指针。
(3) *this
表示对象当前对象本身
例如,计算Box体积的函数可以改写为
return((*this).height * (*this).width * (*this).length);
C++_自引用指针this的更多相关文章
- 自引用指针this
C++为成员函数提供了一个名字为this的指针,这个指针称为自引用指针,每当创建一个对象时,系统就把this指针初始化为指向该对象,即this指针的值是当前调用成员函数的对象的起始地址.每当调用一个成 ...
- ca71a_c++_指向函数的指针_通过指针调用函数txwtech
/*ca71a_c++_指向函数的指针_通过指针调用函数用typedef简化函数指针的定义简化前: bool(*pf)(const string&, const string &); ...
- STL模板_智能指针概念
一.智能指针1.类类型对象,在其内部封装了一个普通指针.当智能指针对象因离开作用域而被析构时,其析构函数被执行,通过其内部封装的普通指针,销毁该指针的目标对象,避免内存泄露.2.为了表现出和普通指针一 ...
- C++_day06_运算符重载_智能指针
1.只有函数运算符可以带缺省函数,其他运算符函数主要由操作符个数确定 2.解引用运算符和指针运算符 示例代码: #include <iostream> using namespace st ...
- C++之智能指针20170920
/*************************************************************************************************** ...
- 《Linux内核设计与实现》课本第三章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有 ...
- Emiller's Advanced Topics In Nginx Module Development
Emiller的Nginx模块开发指南 By Evan Miller DRAFT: August 13, 2009 (changes) 翻译:Kongch @2010年1月5日 0:04am -- 2 ...
- 【从零学习openCV】opecv操作像素
1. 存取像素值 在opencv中能够直接对cv::Mat类型的图像调用at函数读取或赋值某个像素,我们用个简单的案例来说明: //在一张图像上增加椒盐噪声,image为输入图像.n为噪点个数 voi ...
- C++第三天学习
回顾: 类和对象 class 类名 { public: private: 在类的类部可以访问,在类的外部不能直接访问. protected: 在类的类部可以访问,在类的外部不能直接访问,其子类可以访问 ...
随机推荐
- centos7--zabbix3.4微信报警
1.申请企业微信 1.1 注册企业微信的地址 https://qy.weixin.qq.com/ 1.2 按照提示进行填写 1.3 完善个人信息: 1.4 创建应用 根据提示创建应用: 1.5 筛出重 ...
- Kafka(二) —— Server端设计原理
整理架构 kafka confluence kafka官方文档中文翻译-设计 消息设计 /** * 消息类 * * @author Michael Fang * @since 2019-11-14 * ...
- pyinstaller在64位系统下打包32位程序
使用环境说明:win10 64位,已安装python3.6-64位版本 遇到的问题:win10 64位打包成exe文件后,不能在32位系统运行 需求:使用python打包生成exe文件,win64位和 ...
- C传递参数给main函数
一个很简单的给main函数传递参数的例子: #include <stdio.h> //int main(int argc, char *argv[]){ int main(int argc ...
- unity疯狂牧场完整项目源码 - Frenzy Farming time management game kit V1.0
You will love this game kit! Have you ever wondered what it would be like to run your own farm? Look ...
- 基于 Binlog + Flink 实现多表数据同构/异构方案
https://mp.weixin.qq.com/s/1h942YAcS6fhO5C43hGX-w 什么是数据异构?简单讲,就是将数据进行异地数据异构存储. 数据异构 服务市场使用 BinLake(京 ...
- Springmvc & Report: FineReport vs BIRT vs Jasperreport
Springmvc与jasperreport结合生成报表的一种方法 - OneThin的个人空间 - OSCHINAhttps://my.oschina.net/onethin/blog/14360 ...
- winddows rabbitmq安装与配置
RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...
- 网络通信技术中的中继器repeater
1. repeater的作用 对信号进行再生和还原 2. repeater的优点 延长通讯距离 提高可靠性 增加节点的最大数目 各个网段可以使用不同的通讯速率 3. repeater的缺点 增加了延时 ...
- [原][C++]拒绝智能指针与指针混用,常见智能指针问题
公司一个非专科的程序在开发过程中有些毛躁,但是又想使用些新学的技术 这天他正调试呢,发现有一个BUG怎么也找不到原因. 用的好好的内存怎么就突然被删除了呢,好好的指针,怎么就访问越界了呢 没办法,他只 ...