首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C++面向对象程序设计(谭浩强)第三章第五节学习笔记

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

作者头像
xxxflower
发布2023-04-16 17:22:43
发布2023-04-16 17:22:43
2730
举报
文章被收录于专栏:《数据结构》《数据结构》

3.5 对象指针

3.5.1 指向对象的指针

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

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

类名 * 对象指针名 

3.5.2 指向对象成员的指针

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

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

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

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

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

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

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

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

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

(2)函数返回值的类型

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

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

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

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

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

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

代码语言:javascript
复制
#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)}; 

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.5 对象指针
    • 3.5.1 指向对象的指针
    • 3.5.2 指向对象成员的指针
    • 3.5.3指向当前对象的this指针
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档