指向类成员变量的指针int A:: * p
2017-05-18 11:26
183 查看
#include "stdafx.h"
#include <iostream>
#include <type_traits>
using namespace std;
class A
{
public :
double o; //制造一个偏移量
int a;
};
class B: public A
{
public:
int b;
};
int main()
{
A a1 ;
a1.a = 111;
A a2;
a2.a = 222;
int *p1 = NULL;//普通指针
p1 = &a1.a;//指向成员变量a的地址
cout << *p1 << endl;
int A::* p2 = NULL;//一个指向类成员变量的指针
p2 = &A::a;// 注意,a并不是静态成员变量
cout << (int&) ( p2 )<< endl; //p2果然是变量a在类中的偏移量 ,偏移了double的8字节
cout << a1.*p2 << endl; //注意,用一个具体的对象来寻址的
cout << a2.*p2 << endl; //注意,用一个具体的对象来寻址的
/*
看了上面的例子,很容易理解 ,它是一个偏移量而不是地址,因此必须用这种静态的写法, 这里不能用对象地址的地址来赋值。
取内容: a1.*p2 或者 pA-> *p2;
这是"指向类成员变量的指针"的解引用,记住,解引用必须有实际的地址,不同的对象有不同的实际地址,加上各自的偏移量,就是各自成员变量的地址。
*/
B b1;
b1.a = 333;
b1.b = 444;
int A::*p3 = &B::a;
//int A::*p4 = &B::b; //错误,因为A无法知道b
int B::* p5 = &A::a; //指向父类的
int B::* p6 = &B::b;
cout << a1.*p3 << endl; //注意,用一个具体的对象来寻址的
cout << b1.*p5 << endl; //注意,用一个具体的对象来寻址的
cout << b1.*p6 << endl; //注意,用一个具体的对象来寻址的
return EXIT_SUCCESS;
}
#include "stdafx.h"
#include <iostream>
#include <type_traits>
using namespace std;
class A
{
public :
double o; //制造一个偏移量
int a;
};
class B: public A
{
public:
int b;
};
int main()
{
A a1 ;
a1.a = 111;
A a2;
a2.a = 222;
int *p1 = NULL;//普通指针
p1 = &a1.a;//指向成员变量a的地址
cout << *p1 << endl;
int A::* p2 = NULL;//一个指向类成员变量的指针
p2 = &A::a;// 注意,a并不是静态成员变量
cout << (int&) ( p2 )<< endl; //p2果然是变量a在类中的偏移量 ,偏移了double的8字节
cout << a1.*p2 << endl; //注意,用一个具体的对象来寻址的
cout << a2.*p2 << endl; //注意,用一个具体的对象来寻址的
/*
看了上面的例子,很容易理解 ,它是一个偏移量而不是地址,因此必须用这种静态的写法, 这里不能用对象地址的地址来赋值。
取内容: a1.*p2 或者 pA-> *p2;
这是"指向类成员变量的指针"的解引用,记住,解引用必须有实际的地址,不同的对象有不同的实际地址,加上各自的偏移量,就是各自成员变量的地址。
*/
B b1;
b1.a = 333;
b1.b = 444;
int A::*p3 = &B::a;
//int A::*p4 = &B::b; //错误,因为A无法知道b
int B::* p5 = &A::a; //指向父类的
int B::* p6 = &B::b;
cout << a1.*p3 << endl; //注意,用一个具体的对象来寻址的
cout << b1.*p5 << endl; //注意,用一个具体的对象来寻址的
cout << b1.*p6 << endl; //注意,用一个具体的对象来寻址的
return EXIT_SUCCESS;
}
相关文章推荐
- 指向成员函数的指针类型成员变量
- C/C++学习笔记:指向类成员变量的指针
- C/C++中指向结构体变量的指针,调用指向的那个结构体中的成员
- 指向结构体变量的指针引用结构体变量的成员
- 指向类成员变量的指针并非指针
- 从汇编看c++中指向成员变量的指针(一)
- 指向类成员变量的指针并非指针
- 从汇编看c++中指向成员变量的指针(二)
- 指向对象成员变量的指针和指向成员函数的指针
- 我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。为什么如下的代码((int *)p)++; 不行?
- 用结构体指针指向(->)或结构体变量加点(.)后不出现结构体成员
- C语言int类型指针指向char类型变量简单实例
- 指向对象成员变量的指针
- 函数指针,指向成员函数的指针与指向成员变量的指针
- 指向结构体变量的指针引用结构体变量中的成员
- 指向类成员变量的指针并非指针
- osg源码中的ref_ptr operator unspecified_bool_type() 指向类数据成员的指针&类转化为另一类型(如自定义的C类转化为int)
- 指向结构体变量的指针引用结构体变量的成员
- C++中,如何定义和使用指向成员函数的指针
- 利用指向类成员函数的指针数组,实现更加隐蔽的接口