类成员变量和成员函数的地址
2010-10-26 09:51
309 查看
class 指向成员函数的指针必须与向其赋值的函数类型匹配不是两个而是三个方面都要匹配
参数的类型和个数
返回类型
它所属的类类型
做下面的一个测试
注意在获取类成员函数的时候,如果直接把指针输出来,得到的是1,我想是因为编译器把&A::fun1当做bool变量
void (A::*ptr)();
ptr=A::fun1;或者ptr=&A::fun1都可以
另外需要注意的是
指向数据成员的指针赋予的是一个目前还不存在的一个类成员的地址,而这个地址只有在使用实际类对象进行调用时才会真正的确定下来
就是说在类还没有对象时候,成员变量时没有空间的
运行结果
本文出自 “xiesiyuana的博客” 博客,请务必保留此出处http://seanyxie.blog.51cto.com/1319339/1375958
参数的类型和个数
返回类型
它所属的类类型
做下面的一个测试
#include<iostream> using namespace std; class A { public: A(int); void fun1(); virtual void fun2(); static void fun3(); int num1; static int num2; }; A::A(int i) { num1=i; } void A::fun1() { cout<<"I am in fun1"<<endl; } void A::fun2() { cout<<"I am in fun2"<<endl; } void A::fun3() { cout<<"I am in fun3"<<endl; } int A::num2=1; void main() { A a(2); //获取静态成员数据的地址 int *ptr_static=&A::num2; cout<<"静态成员数据的地址"<<ptr_static<<endl; ptr_static=&a.num2; cout<<"a.num2静态成员数据的地址"<<ptr_static<<endl; //获取静态函数的地址 void (*ptr_staticfun)=A::fun3; cout<<"静态成员函数的地址"<<ptr_staticfun<<endl; ptr_staticfun=a.fun3; cout<<"a.fun3静态成员函数的地址"<<ptr_staticfun<<endl; //获取普通成员函数的地址 typedef void (A::*ptr_commomfun)(); ptr_commomfun ptr=A::fun1; cout<<"普通成员函数的地址"<<ptr<<endl; //如果直接输出ptr的话,输出来的是1,因此应该把ptr地址中的内容读出来 cout<<"普通成员函数的地址"<<*((long*)&ptr)<<endl; ptr=a.fun1; cout<<"a.fun1普通成员函数的地址"<<*((long*)&ptr)<<endl; ptr_commomfun ptr_virtual=A::fun2; //获取虚函数的地址 cout<<"虚成员函数的地址"<<*((long*)&ptr_virtual)<<endl; ptr_virtual=a.fun2; cout<<"a.fun2虚成员函数的地址"<<*((long*)&ptr_virtual)<<endl; int *p; int A::*q; q=&A::num1; //指向数据成员的指针赋予的是一个目前还不存在的一个类成员的地址,而这个地址只有在使用实际类对象进行调用时才会真正的确定下来 //就是说在类还没有对象时候,成员变量时没有空间的。 cout<<"普通成员数据的地址"<<*((long *)&q)<<endl; p=&a.num1; cout<<"a.num2普通成员数据的地址"<<p<<endl; }
注意在获取类成员函数的时候,如果直接把指针输出来,得到的是1,我想是因为编译器把&A::fun1当做bool变量
void (A::*ptr)();
ptr=A::fun1;或者ptr=&A::fun1都可以
另外需要注意的是
指向数据成员的指针赋予的是一个目前还不存在的一个类成员的地址,而这个地址只有在使用实际类对象进行调用时才会真正的确定下来
就是说在类还没有对象时候,成员变量时没有空间的
运行结果
本文出自 “xiesiyuana的博客” 博客,请务必保留此出处http://seanyxie.blog.51cto.com/1319339/1375958
相关文章推荐
- 类成员变量和成员函数的地址
- 29. 静态成员(成员变量和成员函数)
- Python中定义“私有”成员变量和成员函数
- C++成员变量的初始化顺序 标签: C++成员变量初始化顺序 2017-02-22 23:44 101人阅读 评论(0) 收藏 举报 分类: C++程序设计浅尝(46) 原文地址:http://w
- 与struct相关的宏定义 --- 根据成员变量偏移,获取struct起始地址
- 根据成员变量的地址推算出结构体变量的地址
- 导出DLL 隐藏私有成员变量和成员函数 工厂方法
- 类对象的成员变量地址为成员变量在类对象中的偏移量
- C语言--通过结构体成员的地址获取结构体变量的地址
- Java反射打印类的信息,包括类的成员函数、成员变量(只获取成员函数)
- C/C++—— 除了用类成员函数访问类私有成员变量外,还可以通过类对象地址来直接访问和修改类的私有成员变量
- C语言根据结构体成员变量的地址,得到结构体的地址
- C/C++笔试系列--如何利用成员变量作为成员函数的默认参数
- 成员变量作为成员函数的默认参数
- c++对象中的成员变量地址分布
- 通过结构体成员的地址获取结构体变量的地址
- 成员指针的定义与简单应用(成员变量地址的问题)
- C#直接调用C++非托管结构体、类、成员函数、成员变量
- 通过结构体成员的地址获取结构体变量的地址
- 通过结构体成员变量地址得到结构体的地址