对类成员的简单认识
··在c++中,除了可以定义对象外,还可以定义成员指针。类成员指针包括类数据成员指针和类成员函数指针。
·
类成员成员指针
类数据成员指针的定义格式如下:
类型 类名::指针名
由于类不是在运行存在的对象,因此在使用类成员数据成员指针时,需要首先指定一个数据成员,然后通过类的对象来引用指针所指向的成员。
·
分析如下程序结果
#include<iostream>
using namespace std;
int s = 0;
class my
{
public:
void disp()
{
cout << "m=" << m << endl;
cout << "n=" << n << endl;
}
int m, n;
};
int main()
{
int my::* p ;
p= &my::m;//类数据成员指针
my a;
a.*p = 10;
p = &my::n;
a.*p = 20;
a.disp();
return 0;
}
【解析】:上述结果首先定义了一个类数据成员指针,并指向类my的数据成员吗,执行“a.*p=10”语句相当于给对象a的数据成员m赋值10.然后将p指向类my的数据成员n,执行“a.*p=20”相当于给对象a的数据成员n赋值20。
·
·
·
类成员函数指针
(1)指向类成员函数指针的定义格式如下:
类型(类名::*指针名)(参数表)
·
(2)给类成员函数指针 赋值 的格式如下:
指向函数的指针名=函数名
·
(3)程序中使用指向函数的指针调用函数的格式:
(*指向函数的指针名)(实参表)
·
【经典例题】分析如下程序
#include<iostream>
using namespace std;
int s = 0;
class my
{
int m, n;
public:
void setm(int i)
{
m = i;
}
void setn(int i)
{
n = i;
}
void disp()
{
cout << "m=" << m << "n=" << n << endl;
}
};
int main()
{
void (my::*p)(int);//定义类成员函数指针
my a;
p = &my::setm;
(a.*p)(10);
p = &my::setn;
(a.*p)(20);
a.disp();
return 0;
}
解析:上述程序中,定义了一个类成员函数指针p,通过执行“p=my::setm”语句使该指针指向setm,"(a.*p)(10);"语句相当于执行“a.setm(10)”,使对象a的数据成员m=10.
通过执行“p=my::setn”语句是该指针指向setn,“(a.*p)(20)”语句相当于执行“a,setn(10)”,使该对象a的数据成员n=20。
·
·
·
——文章转载至文本资料,仅用于个人学习
——2021年4月20日19:55