成员指针

成员指针

成员变量指针

一.声明、定义和初始化

•类型 类名::*成员变量指针 = &类名::成员变量;

class Student 
     { 
        public: 
                string m_name; 
                string m_sex; 
                int m_age; 
                int m_no; 
     };
    –int Student::*p_age = &Student::m_age;

二.解引用

•对象.*成员变量指针
–“.*”是一个独立的运算符,成员指针解引用运算符
Student student (…);
student.*p_age = 25;

•对象指针->*成员变量指针
–“->*”是一个独立的运算符,间接成员指针解引用运算符
Student* student = new Student (…);
student->*p_age = 25;

三.保存相对地址

•成员变量指针的本质,就是特定成员变量在类对象实例中的相对地址

•成员变量指针解引用,就是根据类对象实例的起始地址,结合成员变量指针中的相对地址,计算出具体成员变量的绝对地址,并访问之
这里写图片描述

成员函数指针

一.声明、定义和初始化

•返回类型 (类名::*成员函数指针) (形参表) = &类名::成员函数名;

    –class Student 
     { 
        public: 
                void who (void) const 
                { 
                    cout << "我是" << m_name << ",性别" << m_sex << ",今年" << m_age << "岁,学号" << m_no << endl; } 
                };
    –void (Student::*p_who) (void) const = &Student::who; //&不能省

二.解引用

•(对象.*成员函数指针) (实参表)
–Student student (…);
(student.*p_who) ();

•(对象指针->*成员函数指针) (实参表)
–Student* student = new Student (…);
(student->*p_who) ();

•虽然成员函数并不存储在对象中,不存在根据相对地址计算绝对地址的问题, 但也要通过对象或对象指针对成员函数指针解引用,其目的只有一个,即提供this指针

静态成员指针

一.静态成员变量指针

•声明、定义和初始化
–类型* 静态成员变量指针 = &类名::静态成员变量;

 class Student 
 {
     public: 
            static Teacher s_teacher; 
 }; 

 Teacher* p_teacher = &Student::s_teacher;

•解引用
–静态成员变量指针->成员
cout << p_teacher->m_age << endl;

–*静态成员变量指针 cout << (*p_teacher).m_age << endl;

•类的静态成员变量不是对象的一部分,不需要根据相对地址计算绝对地址,也不需要通过对象或其指针解引用

二.静态成员函数指针

•声明、定义和初始化
–返回类型 (*静态成员函数指针) (形参表) = 类名::静态成员函数名;

class Student 
{ 
public: 
        static Student* create (void); 
}; 

Student* (*p_create) (void) = Student::create;

•解引用
–静态成员函数指针 (实参表) Student* student = p_create ();

•类的静态成员函数没有this指针,无需调用对象

三.与普通指针无异

•静态成员与对象无关,因此静态成员指针与普通指针并没有任何本质性区别

•所有成员指针,无论静态与否,都受访问控制属性约束

class Student 
 { 
    private: 
            int m_age; 
            static Teacher s_teacher; 
 };

–int Student::*p_age = &Student::m_age; // 错误 
 Teacher* p_teacher = &Student::s_teacher // 错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值