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

来源:互联网 发布:淘宝分销钱怎么分 编辑:程序博客网 时间:2024/05/18 01:18

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

源程序例子如下:

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

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;
}

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

成员函数的地址如下:

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

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

对象的数据改变情况

原创粉丝点击