学习C++(二)

关于C++的对象指针问题

小编今天学习了 类 中关于对象指针的知识,特来分享一下。

分为三个不同类型的指针:
(1):指向对象的指针

存放对象初始地址的指针变量就是指向对象的指针变量。
定义指向类对象指针变量的一般形式
类名 * 对象指针名;

//范例
class Time 
 { 
 public: 
 int hour; 
 int minute; 
 int sec; 
 void get_time( ); 
 }; 
void Time∷get_time( ) 
 { 
 cout<<hour<<":"<<minute<<":"<<sec<<endl; 
 } 
Time *pt; //定义 pt 为指向 Time 类对象的指针变量
Time t1; //定义 t1 为 Time 类对象
pt = &t1; // pt 就是指向 Time 类对象的指针变量,它指向对象 t1

这种指针与c语言中的类型指针很像,
通过指针符号便可以进行访问数据成员以及成员函数:

*pt //pt 所指向的对象,即 t1。
(*pt).hour //pt 所指向的对象中的 hour 成员,即 t1.hour 等价
pt->hour //pt 所指向的对象中的 hour 成员,即 t1.hour
(*pt).get_time ( ) //调用 pt 所指向的对象中的 get_time 函数,即 t1.get_time 等价
pt->get_time ( ) //调用 pt 所指向的对象中的 get_time 函数,即 t1.get_time

(2)指向对象成员的指针:

1)指向 数据成员 的指针
定义指向对象数据成员的指针变量的一般形式
数据类型名 *指针变量名;

//范例
int * p1; //定义指向整型数据的指针变量
p1 = &t1.hour; //将对象 t1 的数据成员 hour 的地址赋给 p1,p1 指向 t1.hour 
cout<<*p1<<endl; //输出 t1.hour 的值

这种写法与C语言也是很象,都是预先定义一个类型指针并对其及逆行初始化,只不过在C++中,初始化的地址变成了一个实例对象的一个数据成员。

2)指向对象成员函数的指针
定义指向公有成员函数指针变量的一般形式
数据类型名 (类名∷*指针变量名)(参数表列);
使指针变量指向一个公有成员函数的一般形式

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

小编也是看了看,以为会了,没想到在敲代码 的时候出现了“提笔忘字”的现象。?????

#include <iostream.h> 
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( ) 
 { 1
 Time t1(7,17,37); //定义 Time 类对象 t1 2
 int *p1 = &t1.hour; //定义指向整型数据的指针变量 p1,并使 p1 指向 t1.hour 3
 cout<<*p1<<endl; //输出 p1 所指的数据成员 t1.hour 4
 t1.get_time( ); //调用对象 t1 的成员函数 get_time 5
 Time *p2 = &t1; //定义指向 Time 类对象的指针变量 p2,并使 p2 指向 t1 6
 p2->get_time( ); //调用 p2 所指向对象(即 t1)的 get_time 函数 7
void (Time∷*p3)( ); //定义指向 Time 类公有成员函数的指针变量 p3 8
 p3 = &Time∷get_time; //使 p3 指向 Time 类公有成员函数 get_time 9
 (t1.*p3)( ); //调用对象 t1 中 p3 所指的成员函数(即 t1.get_time( )) 10
 }

其实定义指向成员函数指针是挺容易理解的,就像C语言中或者C++之中最初关于 定义普通函数那样,

类型名 函数名(参数列表)
{
代码块
}

只不过这里的函数名 用一个相关的 类指针代替了。

void (Time∷*p3)( ); //定义指向 Time 类公有成员函数的指针变量 p3

小编一开始就写错了代码:

int main()
{
	void(Time:: * p1)();
	Time time(1, 2, 3);
	p1 = &time.get_time;

这样的话,p1指针的类型定义 和 所赋给指针的所指向的对象 不相符合。

正确的写法如下:

p1 = &Time::get_time;

希望大家有所 警醒。?????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值