指向成员的指针

#include <iostream>

using namespace std;

class Data

{

public:

int a;

int b;

int c;

public:

Data():a(0),b(0),c(0){}

void printf(){cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;}

};

int main()

{

Data x;

Data *y=&x;

int Data::*pDataInt=NULL;     //定义一个Data类中int变量的指针,初值设置为空。

pDataInt=&Data::a;            //此处指定类中偏移位置,指向成员a的位置,并不是得到a                                       //的真实地址。

y->*pDataInt=34;              //这里通过this指针可以得到真正的地址,然后完成赋值。

x.printf();

pDataInt=&Data::b;

y->*pDataInt=35;

x.printf();

x.*pDataInt=1;

x.printf();

pDataInt=&Data::c;

x.*pDataInt=2;

x.printf();

return 0;

}

结果如下:

时间: 2024-08-08 11:51:49

指向成员的指针的相关文章

C++ 指向成员函数指针问题

成员函数指针与常规指针不同,一个指向成员变量的指针并不指向一个内存位置.通常最清晰的做法是将指向数据成员的指针看作为一个偏移量. class ru_m { public: typedef int (ru_m::*p)(); p get_m(); int show(); }; int ru_m::show(){ return 10000; } ru_m::p ru_m::get_m(){ ru_m::p vc; //错误,当为对象时,对象指向的地址为相对地址,非内存地址 //所以,ru_m->sh

指向成员函数指针,虚函数指针,静态成员函数指针

// PointtoMemberFunction.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <IOSTREAM> using namespace std; class A{ public: void f(){ cout<<"f()"<<endl; } virtual void g(){ cou

C++成员函数指针的应用

 C++中,成员指针是最为复杂的语法结构.但在事件驱动和多线程应用中被广泛用于调用回叫函数.在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数.在这样的应用中,如果不用成员指针,编程是非常困难的.  刚遇到这种语法时也许会让你止步不前.但你会发现,使用恰当的类型定义之后,复杂的语法是可以简化的.本文引导你了解成员函数指针的声明,赋值和调用回叫函数.  成员函数指针的声明  一个成员函数指针包括成员函数的返回类型,后随::操作符类名,指针名和函数的参数.初看上去,语法有点复杂.其实可以把

成员函数指针和指向静态成员函数的指针

#include <iostream> using namespace std; class Student{ public:     Student(const string& name):m_name(name){}     void who(void){         cout << m_name << endl;     }     string m_name;     static int s_add(int a,int b){         re

指向类成员的指针

c++语言中,可以说明指向类的数据成员的指针和指向类的成员函数的指针. 这两种指针必须与对象或指向对象的指针结合使用. 1.指向类的数据成员的指针定义格式为: 类型名 类名:: *指针; 这种说明不是说指针属于类的,而是说明指针只能指向指定类的指定类型的成员. 2.指向类的成员函数的指针 类型名 (类名:: *指针)(参数表); 同样的道理,函数指针并不属于类,而是只能指向类的指定原型的函数. #include<iostream.h> class A {public: int a; int b

成员函数指针,动态绑定(vc平台)

上一篇介绍了gcc对成员函数指针做了thunk的处理,本篇介绍vc对成员函数指针如何处理,还有动态绑定相关的处理. 同样用回上一篇的例子: struct point {float x,y;}; struct obj { virtual ~obj {} void foo(int) {} void foo(point) {} virtual void vfoo() {} }; struct objobj : public obj { virtual ~objobj {} virtual void v

C++学习之成员函数指针

C++中有函数指针,申明方式如下: void(*p)(float) 其中p就是一个函数指针,如果我们定义一个函数 void fun(float) 那么我们可以p = fun 或者p = &fun来给p赋值 于此同时还有一个概念叫做成员函数指针,这个指针和函数指针类似,所不同的是它是一个指向类的成员函数的指针,其声名方式如下: void (class_name::*p)(float) 这就代表p是一个指向class_name类中形如void fun_name(float)的函数的函数指针 赋值的方

类的成员函数指针(比較深入)

From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx 个人感觉对于类的成员函数指针这块解说的比較深入具体 推荐阅读 ///////////////////////////////////////////////// 先看这样一段代码 class test {    public:       test(int i){ m_i=i;}       test(){} void hello()       {        

C++中用成员函数指针模拟多态

1.成员函数指针的用法 1 #include <iostream> 2 using namespace std; 3 class base 4 { 5 public: 6 int test(int lhs,int rhs) 7 { 8 cout<<"base test"<<endl; 9 return 1; 10 } 11 }; 12 class derived:public base 13 { 14 public: 15 int test(int