成员指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了成员指针相关的知识,希望对你有一定的参考价值。

成员变量指针

静态成员变量、静态成员函数与对象无关,静态成员指针与普通指针一致

本质就是特定成员变量在对象实例中的相对地址,解引用时再根据调用对象的地址计算该成员变量的绝对地址

定义

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

使用

    对象.*成员变量指针\对象指针->*成员变量指针 =====>  .*成员变量解引用\->* 间接成员变量解引用

成员函数指针

 虽然成员函数并不存储在对象中,但也要通过对象或者对象指针对成员函数指针解引用,其目的只有一个,即提供this指针

定义

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

使用

  (对象.*成员函数指针)(实参表)

  (对象指针->*成员函数指针)(实参表)

#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
    Student(const string & name = "",int age = 0):m_name(name),m_age(age){}
    string m_name;
    int m_age;
    static int m_data;
    static int add(int x , int y)
    {
        return x+y;
    }
    void who()
    {
        cout << m_name << " "
             << m_age << endl;
    }
};
int Student::m_data = 100;
int _tmain(int argc, _TCHAR* argv[])
{//成员变量指针
    string Student::*pname = &Student::m_name;//pname的初始化不需要对象,他将指向任何对象的m_name
    //存成员变量的偏移量,在解引用时,使用起始位置+偏移量

    int Student ::*page = &Student::m_age;
    Student s1("张飞",24),s2("赵云",25);
    //成员函数指针
    void (Student::*pwho)(void) = &Student::who;
    //成员指针时,取地址必须写
    cout << s1.*pname << endl;//(.*,成员指针解引用运算符->*间接成员指针解引用运算符)
    cout << s2.*pname <<endl;
    cout << s1.*page << endl;
    cout << s2.*page << endl;
    (s1.*pwho)();
    (s2.*pwho)();
    
    int *pdata = &Student::m_data;
    cout << *pdata << endl;
    int(*padd)(int ,int ) = Student ::add;
    cout << padd(100,200) << endl;

    system("pause");    
    return 0;
}

 

以上是关于成员指针的主要内容,如果未能解决你的问题,请参考以下文章

更新:C++ 指针片段

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

片段中的 EditText 上的空指针异常 [重复]

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合

C 语言结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )