关于类成员变量始终有点不明白,请老手赐教.

来源:百度知道 编辑:UC知道 时间:2024/05/20 07:36:19
假如在A.h中定义了
Class A
{
public:
int m_nIndex;
void SetIndex();
}

在A.cpp中执行
void A:: SetIndex()
{
m_nIndex = 100;
}
那么再次访问的时候, m_nIndex还是等于100的.
但如果B.cpp访问A.cpp中的m_nIndex时候,它是空的.
void B:: SetIndex()
{
A GetIndex;
GetIndex. m_nIndex;
}
请问除了定义成全局外有什么办法在A修改m_nIndex值后B还能访问到修改后的值呢?

楼上的分析证正确的,你定义成全局变量也没有用。
void B:: SetIndex()
{
A GetIndex;//这是一个新的对象,对象不是类,你这个时候有执行过这个对象的void A:: SetIndex()函数吗,没有,你要调用GetIndex.SetIndex()后这个对象才有了一个m_nIndex = 100,否则m_nIndex不过根本没有赋值过,因为void A:: SetIndex()
还没执行过,
你说在A.cpp中执行,这是个错误的说话,你只是在A.cpp中定义了这样一个函数,可还没有执行过这个函数,这个函数是存在的,这个函数的动作时没有的,也就是m_nIndex = 100没有执行过,既然没有执行过这个100当然是不存在了

“但如果B.cpp访问A.cpp中的m_nIndex时候”这个说法和你理解一样错,不存在B.cpp访问A.cpp,还是那个问题,类和对象你没搞明白。是b中的函数中的一个A类的对象的m_nIndex属性

GetIndex. m_nIndex;
}

要达到你的目标可以这样改
void B:: SetIndex()
{
A GetIndex;
GetIndex.SetIndex();//这样一个a类的对象GetIndex执行了SetIndex,这样你就在去读取GetIndex的m_nIndex就有值了

GetIndex. m_nIndex;//这里m_nIndex为100
}

希望楼主能搞明白类和对象的区别,还不明白的话建议百度搜类和对象,这样会有很详细的介绍

用静态成员变量

你的理解有问题。

void B:: SetIndex()
{
A GetIndex;
GetIndex.m_nIndex;
}
在这个函数里面GetIndex是一个全新的对象,在没有执行GetIndex.SetIndex()之前GetIndex. m_nIndex是没有改变过的(保持着在构造函数里初始的值)。
所以它是