指向类的非静态成员的指针

类的成员自身也是一些变量、函数或者对象等,因此也可以直接将他们的地址存放到一个指针变量中,这样,就可以使指针直接指向对象的成员,今儿可以通过这些指针访问对象的成员。
声明指针语句的一般形式为:
类型说明符 类名::*指针名;//声明指向数据成员的指针
类型说明符(类名::*指针名)(参数表);//声明指向函数成员的指针

对数据成员指针赋值的一般语法形式为:
指针名=&类名::数据成员名;
访问数据成员时,可通过以下两种语法形式实现:
对象名.类成员指针名 或 对象指针名-> 类成员指针名

成员函数指针在声明之后要用以下形式的语句对其赋值:
指针名=&类名::函数成员名;
(常成员函数与普通成员函数具有不同的类型,因此能够被常成员函数赋值的指针,需要在声明时明确写出const关键字)
可以用以下形式的语句利用指针调用函数:
(对象名.类成员指针名)(参数表) 或(对象指针名-> 类成员指针名)(参数表)

以下是访问对象的公有成员函数的不同方式:

#include<iostream>
using namespace std;
class point
{
public:
       point(int x=0,int y=0):x(x),y(y){}
       int getx() const {return x;}
       int gety() const {return y;}
private:
    int x,y;
};
int main()
{
    point a(4,5);
    point *p1=&a;//定义对象指针并初始化
    int (point::*funcptr)() const=&point::getx;//定义成员函数指针并初始化
    cout<<(a.*funcptr)()<<endl;//使用成员函数指针和对象名访问成员函数
    cout<<(p1->*funcptr)()<<endl;//使用成员函数指针和对象指针访问成员函数
    cout<<a.getx()<<endl;//使用对象名访问成员函数
    cout<<p1->getx()<<endl;//使用对象指针访问成员函数
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值