成员指针
来源:互联网 发布:c语言里 n 编辑:程序博客网 时间:2024/06/05 20:28
成员指针
成员变量指针
一.声明、定义和初始化
•类型 类名::*成员变量指针 = &类名::成员变量;
–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 // 错误
- 成员指针
- 成员指针
- 成员指针
- 成员指针
- 成员指针
- 成员函数指针和成员变量指针
- C++指向成员的指针-成员指针
- 函数指针 成员函数指针
- 成员函数指针【转贴】
- 类成员函数指针
- 成员函数指针数组
- 成员函数 指针
- 类成员函数指针
- 类成员函数指针
- 成员函数的指针
- 成员函数指针数组
- 成员函数指针
- 13.5 管理指针成员
- Mysql使用外连接替换in和not in
- jquery中push(),unshift(),splice() ,concat(),pop(),shift(),slice()等的用法(数组添加元素)
- EasyUI的combobox实现级联设计----基于本地的设计
- Nodejs笔记(3)——事件
- C++标准库的异常类层次结构
- 成员指针
- Android 扫描二维码条形码的链接
- Android NDK开发扫盲及最新CMake的编译使用
- POJ2367
- C/C++不同文件夹下包含头文件的方法及#include的使用
- recyclerview内容显示不全
- android 接收服务器端返回的json数据
- 每日一题(14)—— 交换a,b的值(不使用中间变量)
- swift_045(Swift @IBDesignable和@IBInspectable使用)