C++ this指针的用法
来源:互联网 发布:怎么在淘宝上买电影票 编辑:程序博客网 时间:2024/06/05 10:40
this指针的含义及其用法:
1. this指针是一个隐含于每一个成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。
2. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。
3. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。
4. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值;
在X类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
5. 由于this并不是一个常规变量,所以,不能取得this的地址。
6. 在以下场景中,经常需要显式引用this指针
(1) 为实现对象的链式引用(如例1);
(2) 为避免对同一对象进行赋值操作(如例2);
(3) 在实现一些数据结构时,如list.
7. 举例:
//例1:
/* 编辑编译环境:Dev-C++ 4.9.9.2 */
/* file: person.cpp */
#include <stdio.h>
#include <string.h>
class Person {
public:
typedef enum {
BOY = 0,
GIRL = !BOY
} SexType;
public:
Person(char *n, int a, SexType s)
{
name = new char[strlen(n)+1]; //这里的 name 等价于this->name
strcpy(name,n); //这里的 name 等价于this->name
age = a; //这里的 age 等价于this->age
sex = s; //这里的 sex 等价于this->sex
}
int get_age(void) const
{
//age++; //compile error, 因为 age等价于this->age,而 get_age又是一个const成员函数,
//不能对 this指针所指向的这种对象进行修改,这也是const的一个作用。
//这样做的好处是,增加了代码的健壮性。
return age;
}
Person& add_age(int a)
{
age +=a;
return *this; // 返回本对象的引用
}
private:
char *name;
int age;
SexType sex;
};
void TestPerson(void)
{
Person ZhangSan("ZhangSan", 20, Person::BOY);
printf("ZhangSan.age = %d\n", ZhangSan.get_age());
printf("ZhangSan.add_age = %d\n", ZhangSan.add_age(1).get_age()); //增加1岁的同时,可以对新的年龄直接输出;
return;
}
int main(void)
{
TestPerson();
while(1);
}
/* result:
ZhangSan.age = 20
ZhangSan.add_age = 21
*/
//例2:
/* 编辑编译环境:Dev-C++ 4.9.9.2 */
/* file: location.cpp */
#include <stdio.h>
class Location {
int X,Y;//默认为私有的
public:
void init(int x,int y) { X =x; Y = y;};
void assign(Location& pointer);
int GetX(){ return X; }
int GetY(){ return Y; }
};
void Location::assign(Location& pointer)
{
if(&pointer!=this) //同一对象之间的赋值没有意义,所以要保证pointer不等于this
{
X=pointer.X;
Y=pointer.Y;
}
}
int main()
{
Location x;
x.init(5,4);
Location y;
y.assign(x);
printf("x.X = %d, x.Y = %d \n", x.GetX(), x.GetY());
printf("y.X = %d, y.Y = %d ", y.GetX(), y.GetY());
while(1);
return 0;
}
/* result:
x.X = 5, x.Y = 4
y.X = 5, y.Y = 4
*/
- C++this指针的用法
- C++this指针的理解和用法
- C++this指针的理解和用法
- this指针的用法
- this指针的用法
- this指针的用法
- this指针的用法
- this指针的用法
- C++this 指针用法详解
- C ++的this指针
- c++ this指针的用法
- C++ this指针的用法
- 指针的这种用法:this-> -> ->
- C++ this指针的用法
- this指针的用法详解
- C++ this指针的用法
- C++ this指针的用法
- C++ this指针的用法
- 我是如何从勉强写冒泡成长到轻松get百度offer? (内有许多优质算法书籍介绍及推荐)
- 不使用virtual关键字 模拟虚函数来表现多态性
- java|android 使用socket.io-client连接nodejs websocket
- 错误 CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
- android开发工具-SDK国内下载网址
- C++ this指针的用法
- 会员卡管理系统技术解析(五)登陆与注册之登陆
- 微软100题(36)N支队伍比赛
- UVA104Arbitrage(floyd最短路)
- Android开发 为应用设置自定义字体
- 数据预处理
- data mining - 实用机器学习与技术 读书笔记(七)
- JSP三大指令
- 剑指offer 65 - 滑动窗口的最大值