指向成员的指针只能访问公有成员
- 声明指向公有数据成员的指针 : 类型说明符 类名::*指针名
- 说明指针指向哪个成员 : 指针名 = & 类名::数据成员名
eg:int A::*pc=&A::c; 定义了一个类型为int型的指向A中数据c的指针
- 通过对象名(或对象指针)与成员指针结合来访问数据成员 : 对象名.*类成员指针名; 对象指针名->*类成员指针名
eg:A a; a.*pc=8; A *p;p->*pc=8;
- 声明指向公有成员函数的指针 : 类型说明符 (类名::*指针名)(参数表)
- 初始化: 指针名=类名::函数成员名
eg:int (A::*pfun)(int)=A::fun; 定义了一个int类型指向A中函数fun的指针,fun的参数为一 个int型。
- 通过对象名(或对象指针)与成员指针结合来访问函数成员:(对象名.*类成员指针名)(参数表) (对象指针名->*类成员指针名)(参数表)
eg:A a;a.*pfun(9); A *p; p->*pfun(9);
1.2 对象指针和对象引用作函数参数- 对象指针作为函数参数
实现传址调用
使用对象指针作为形参仅将对象的地址值传给形参,提高运行效率。
- 对象引用作函数参数
实现传址调用
比指针更简单、更直接
1.3 this指针- 隐含于每一个类的成员函数中的特殊指针。
- 明确地指出了成员函数当前所 *** 作的数据所属的对象。
- 当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对对象的数据成员进行 *** 作时,就隐含使用了this指针。
相同类的若干个对象的集合构成一个对象数组
- 声明:类名 数组名[元素个数]
- 访问方法:通过下标访问 数组名[下标].成员名
对象数组初始化
数组中每一个元素对象被创建时,系统都会调用类构造函数初始化改对象
通过初始化列表赋值:eg: Point A[2]={Point(1,2),Point(3,4)}
如果没有为数组元素指定显示初始值,数组元素便使用默认值初始化(调用默认构造函数)
2.2 指向数组的指针和指针数组2.2.1 指向数组的指针
指向数组的指针可以指向一维对象数组,也可以指向二维数组
指向一维数组的一级指针声明: 类名 (*指针名)[大小]
eg: A aa[2][3];
A(*paa)[3]=aa;
定义了一个数组指针,指向aa,长度为3。
#include
using namespace std;
class A
{
public:
A(int i,int j) //成员函数
{ x=i;y=j; }
A() //函数重载
{ x=y=0; }
void Print()
{ cout<
2.2.2 指针数组
指针数组是指数组的元素是指向对象的指针,要求所有数组元素都是指向相同类的对象的指针。
声明: 类名 *对象指针数组名[大小]; 对象指针数组可以被初始化也可以被赋值
eg: A *arry1[4]={&a4,&a3,&a2,&a1};
#include
using namespace std;
class A
{
public:
A(int i=0,int j=0)
{ x=i;y=j; }
void Print()
{ cout<Print(); //使用指针数组访问对象中的成员函数
cout<Print();
return 0;
}
三.常类型
3.1 常对象
const 类名 对象名(初值);
类名 const 对象名 (初值);
3.2 常指针和常引用3.2.1 常指针——地址为常量的指针 :类型 *const 指针名=初值;
int a=0;
eg:int *const p1=&a;
指向的值为常量的指针: const 类型 *指针名= 常量;
eg:const int *p2=&a;
3.2.2 常引用 :const 类型 &引用名 =初值;
eg:const int &c =a;
3.3常数据成员格式:const 类型 常数据成员名
常数据成员的值不能改变
3.4 常成员函数类型 成员函数名 (参数表) const
{函数体}
常成员函数可以引用const数据成员,也可以引用非const数据成员,非const数据成员在常成员函数中可以引用,但不可改变。
常对象的数据成员都是常数据成员,其值不能变。
常对象只能调用常成员函数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)