C++中的指针
2015-08-17 17:00
295 查看
1、指向对象的指针
在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象空间的起始地址就是对象的指针。定义指向类对象的指针变量的一般表达式为:
类名* 对象指针名
如下例,定义一个Time类,再定义指向Time类的对象的指针p和对象t1。
Class Time
{
Public:
inthour;
intminite;
intsecond;
voidget_time();
};
Void Time::get_time()
{
Cout<<hour<<”:”<<minite<<”:”<<second<<endl;
}
Time * p;
Time t1;
P=&t1;
则可以通过对象指针访问对象和对象成员,
(*P).hour; //与t1.hour等价
p->.get_time(); //与t1.get_time()等价
2、指向对象数据成员的指针
定义指向对象数据成员的指针与定义指向普通变量的指针的方法相同。
数据类型名* 指针变量名
如
*p1;
p1=&t1.hour; //将对象t1的数据成员hour的地址赋给p1
cout<<*p1<<endl; //输出t1.hour的值
3、指向对象函数成员的指针
定义指向对象成员函数的指针与定义指向普通函数的指针是不同的,定义指向普通函数的指针:
数据类型名(*指针变量名)(参数列表)
如
void (*p) ( ); //p指向void型函数的指针变量
p=fun; //将fun函数的入口地址赋给p,p就指向了函数fun
(*p)( ); //调用fun函数
然而定义一个指向对象成员函数的指针则要复杂一些,如果模仿普通函数的定义,
P=t1.get_time;
编译将会出错!因为成员函数与普通函数的一个最根本区别:它是类中的成员。编译系统要求在3各方面都要匹配:(1)函数参数的类型和个数;(2)函数返回值类型;(3)所属的类。
因此应该采用如下形式定义:
数据类型名(类名::*指针变量名)(参数列表);
如
void (Time :: *p2)( );
p2=&Time::get_time;
4、This指针
对一个类定义多个对象,每个对象的数据成员都分别占有存储空间,但不同对象都调用同一个函数代码段。那么,当不同对象的函数成员应用函数成员时,怎么能保证引用的是所指定对象的数据成员?C++中是这样解决的:在每一个成员函数中都包含一个特殊的指针this,它是指向本类对象的指针,其值是当前被调用的成员函数所在的对象的起始地址。如当调用成员函数数t1.get_time时,编译系统就把对象t1的起始地址赋给this指针。
在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象空间的起始地址就是对象的指针。定义指向类对象的指针变量的一般表达式为:
类名* 对象指针名
如下例,定义一个Time类,再定义指向Time类的对象的指针p和对象t1。
Class Time
{
Public:
inthour;
intminite;
intsecond;
voidget_time();
};
Void Time::get_time()
{
Cout<<hour<<”:”<<minite<<”:”<<second<<endl;
}
Time * p;
Time t1;
P=&t1;
则可以通过对象指针访问对象和对象成员,
(*P).hour; //与t1.hour等价
p->.get_time(); //与t1.get_time()等价
2、指向对象数据成员的指针
定义指向对象数据成员的指针与定义指向普通变量的指针的方法相同。
数据类型名* 指针变量名
如
*p1;
p1=&t1.hour; //将对象t1的数据成员hour的地址赋给p1
cout<<*p1<<endl; //输出t1.hour的值
3、指向对象函数成员的指针
定义指向对象成员函数的指针与定义指向普通函数的指针是不同的,定义指向普通函数的指针:
数据类型名(*指针变量名)(参数列表)
如
void (*p) ( ); //p指向void型函数的指针变量
p=fun; //将fun函数的入口地址赋给p,p就指向了函数fun
(*p)( ); //调用fun函数
然而定义一个指向对象成员函数的指针则要复杂一些,如果模仿普通函数的定义,
P=t1.get_time;
编译将会出错!因为成员函数与普通函数的一个最根本区别:它是类中的成员。编译系统要求在3各方面都要匹配:(1)函数参数的类型和个数;(2)函数返回值类型;(3)所属的类。
因此应该采用如下形式定义:
数据类型名(类名::*指针变量名)(参数列表);
如
void (Time :: *p2)( );
p2=&Time::get_time;
4、This指针
对一个类定义多个对象,每个对象的数据成员都分别占有存储空间,但不同对象都调用同一个函数代码段。那么,当不同对象的函数成员应用函数成员时,怎么能保证引用的是所指定对象的数据成员?C++中是这样解决的:在每一个成员函数中都包含一个特殊的指针this,它是指向本类对象的指针,其值是当前被调用的成员函数所在的对象的起始地址。如当调用成员函数数t1.get_time时,编译系统就把对象t1的起始地址赋给this指针。
相关文章推荐
- C++ map的基本操作和使用
- 使用C语言来解决循环队列问题的方法
- 北邮考研复试C语言上机题目精选
- c++builder 多线程
- 02第一个C语言程序
- C++面试问题
- iOS每日一记---------------------之C语言的一些重点难点
- 详解C语言中的char数据类型及其与int类型的转换
- OC学习笔记之C中的运算符
- C语言结构体排序方法
- C语言得到当前系统时间
- c语言笔记
- 黑马程序员-----c语言基础与重点第一篇——C知识基础
- static关键字的用法(C++)
- 01C语言的概述
- C++基本数据类型
- JAVA Socket编程和C++ Socket编程有什么不同
- [LeetCode] Sort List
- [C++]Single Number III单个数字3
- 漫话C++0x