C++面向对象程序设计(谭浩强)第三章第五节学习笔记

目录

3.5 对象指针

3.5.1 指向对象的指针

3.5.2 指向对象成员的指针

3.5.3指向当前对象的this指针


3.5 对象指针

3.5.1 指向对象的指针

一个对象存储空间的起始地址就是对象的指针。可以定义一个指针变量,用来存放对象的地址,这就是指向对象的指针变量。

定义指向类对象的指针变量的一般形式为:

类名 * 对象指针名 

3.5.2 指向对象成员的指针

对象有地址值,存放对象的起始地址的指针变量就是指向对象的指针变量对象中的成员也有地址,存放对象成员地址的指针变量就是指向对象成员的指针变量。

1.指向对象数据成员的指针

定义指向对象成员函数的指针变量的一般形式为:

数据类型名 * 指针变量名;

int *p;

2.指向对象成员函数的指针

定义普通函数的指针变量的方法

类型名(*指针变量名)(参数列表);

void (*p) ();

指针变量的类型必须与赋值号右侧函数的类型相匹配:(三个方面)

(1)函数参数的类型和参数个数

(2)函数返回值的类型

(3)所属的类。(区别于普通函数的指针变量的定义)

定义指向公用函数的指针变量的一般形式为

数据类型名(类名::* 指针变量名)(参数列表);

void (Time :: *p)();

 使指针变量指向一个公用成员函数的一般形式为

指针变量名=&类名::成员函数名;

p2=&Time :: get_time;

例题:用对象指针方法输出时分秒

#include<iostream>
using namespace std;
class Time
{
public:
	Time(int, int, int);
	int hour;
	int minute;
	int sec;
	void get_time();
};
Time::Time(int h, int m, int s)
{
	hour = h;
	minute = m;
	sec = s;
}
void Time::get_time()
{
	cout << hour << ":" << minute << ":" << sec << endl;
}
int main()
{
	Time t1(10, 13, 56);
	int* p1 = &t1.hour;
	cout << *p1 << endl;
	t1.get_time();
	Time* p2 = &t1;
	p2->get_time();
	void (Time:: * p3)();//定义指向Time类公用成员函数的指针变量p3
	p3 = &Time::get_time;//使p3指向Time类公用函数get_time
	(t1.*p3)();//调用对象t1中p3所指的成员函数
	return 0;
}

 

成员函数不是存放在对象的空间中的,而是存放在对象外的空间中的。

3.5.3指向当前对象的this指针

 不同的对象都调用同一个函数的目标代码。

在每一个成员函数中都包含一个特殊的指针,这个指针的名字是钩钉的,称为this。

它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。

this指针是隐式使用的,它是作为参数被传递给成员函数的。

本来成员函数volume的定义是

int Box:: volume ()

{return (height*width*length)};

C++把它处理为:

int Box:: volume (Box*this)

{return (this->height*this->width*this->length)}; 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxxflower.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值