关于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;
希望大家有所 警醒。?????