C++学习笔记(3)——成员变量、成员函数的指针

探讨成员变量,成员函数在内存中的地址及其访问方式

源程序例子如下:

//
//  例:数据成员和函数成员的指针
//

class  CMyClass
{
    
//私有成员变量
    int m_nX;
    
static int m_nY;
public:
    
//公有成员变量
    int m_nA;
    
static int m_nB;

public:
    CMyClass();
    CMyClass(
int nX,int nA);
    
~CMyClass();

public:
    
void SetX(int nValue);
    
int GetX();

    
static void SetY(int nValue);
    
static int GetY();    
}
;

// 在类外对静态成员赋值
int  CMyClass::m_nY = 100 ;     // 私有静态成员变量赋值
int  CMyClass::m_nB = 200 ;     // 公有静态成员变量赋值

CMyClass::CMyClass()
{
    m_nX
=300;
    m_nA
=400;
    m_nY
=111;
    m_nB
=222;
}


CMyClass::CMyClass(
int  nX, int  nA)
{
    m_nX
=nX;
    m_nA
=nA;
    m_nY
=333;
    m_nB
=444;
}


CMyClass::
~ CMyClass()
{

}


void  CMyClass::SetX( int  nValue)
{
    m_nX
=nValue;
}


void  CMyClass::SetY( int  nValue)
{
    m_nY
=nValue;
}


int  CMyClass::GetX()
{
    
return m_nX;
}


int  CMyClass::GetY()
{
    
return m_nY;
}


main()
{
    
//定义一个对象
    CMyClass myobj1;
    CMyClass myobj2(
500,600);

    
//定义指向成员函数的指针
    //
    // 公有 非静态成员函数 在类外 不能 使用类标志符引用
    
//void (*pSetX)(int)=&CMyClass::SetX;
    
//int (*pGetX)(void)=&CMyClass::GetX;
    
//void (*pSetX)(int)=myobj1.SetX;
    
//int (*pGetX)(void)=myobj1.GetX;
    //
    
    
//

    // 公有 静态成员函数 在类外 可以使用类标志符引用
    void (*pSetY)(int)=&CMyClass::SetY;
    
int (*pGetY)()=&CMyClass::GetY;
    
//
    
    
//定义指向成员数据的指针
    //
    //私有 非静态成员数据 在类外不能使用类标志符引用(私有数据在类外本来就不能访问)
    
//int *pX=&CMyClass::m_nX;
    //
    
    
//

    //私有 静态成员数据 在类外 也不能使用类标志符引用(私有数据在类外本来就不能访问)
    
//int *pY=&CMyClass::m_nY;
    //
    
    
//

    //公有 非静态成员变量 在类外 不能用类标志符引用
    
//int *pA=&CMyClass::m_nA;
    //
    
    
//

    //公有 静态成员变量 在类外 可以使用类标志符引用
    int *pB=&CMyClass::m_nB;
    
//
    
    
//在主函数中通过指向静态成员(数据、函数)的指针对类的静态成员修改
    pSetY(555);
    
*pB=666;
    
    
return 0;
}

根据以上程序,对象的数据空间如下所示:

成员函数的地址如下:

成员函数的地址:不同的对象共用成员函数

成员变量的地址:不同对象的成员变量的存储空间不同,地址不同

对象的数据改变情况

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值