static 在继承中的使用问题

aahuihui 2003-12-24 09:57:01
请问在基类中定义的static成员变量,能不能在子类中重新初始化并赋值。
例如:
class CData
{

}
...全文
94 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2003-12-24
  • 打赏
  • 举报
回复
欺骗!55555
jimsleon 2003-12-24
  • 打赏
  • 举报
回复
class CData
{
static int m_nHead;
virtual int getHead()
{return CData::m_nHead;}
}

CData::m_nHead = 1;

class CNewData:public CData
{
static int m_nHead;
virtual int getHead()
{
return CNewData::m_nHead;
}
}
CNewData::m_nHead = 2;
hwonzor 2003-12-24
  • 打赏
  • 举报
回复
学习学习
aahuihui 2003-12-24
  • 打赏
  • 举报
回复
谢谢,真的受益非浅
sharkhuang 2003-12-24
  • 打赏
  • 举报
回复
static 成员不能继承的吧!
victor_cui 2003-12-24
  • 打赏
  • 举报
回复
好像没有其他的办法,但是在其继承类中定义倒是容易的,可以这样
template <typename T> int CData<T>::m_nHead = value;
因为编译器会给你声称相应的定义,比如你生成了两个继承体系

class CNewData:public CData<CNewData>
class CotherData:public CData<CotherData>
这中间的两个m_nHead其实不是一个,但是他们的值却是一样的,要让他们不一样的办法只有一个,那就是延后处理
int CData<CNewData>::m_nHead = value1;
int CData<CotherData>::m_nHead = value2;
ok
aahuihui 2003-12-24
  • 打赏
  • 举报
回复
能不能请教你,这样定义后,CNewData是不是还是在原来的命名空间中?另外还有没有其他的解决方法,可不可以不在CNewData中定义m_nHead就可以解决这个问题?
victor_cui 2003-12-24
  • 打赏
  • 举报
回复
其实这个问题我们可以使用一个小小的魔术来解决,正如你前面列举的例子
class CData
{
static int m_nHead;
static int getHead()
{return m_nHead;}
}
修改正以下形式:
template <typename T>
class CData
{
static int m_nHead;
static int getHead()
{return m_nHead;}
}

继承中可以使用

class CNewData:public CData<CNewData>
{
static int m_nHead;
}
初始化你的成员
int CNewData::m_nHead = 2;
ok,就做完了,其实你所继承的基类已经不是上面所使用的那个,而是有着全新命名空间的定义,只是继承了上面的方法而已


aahuihui 2003-12-24
  • 打赏
  • 举报
回复
请问在基类中定义的static成员变量,能不能在子类中重新初始化并赋值。
例如:
class CData
{
static int m_nHead;
static int getHead()
{return m_nHead;}
}
CData::m_nHead = 1;
它的子类CNewData的m_nHead的值为要求为2
class CNewData:public CData
{
static int m_nHead;
}
CNewData::m_nHead = 2;
创建的CNewData后,但是基类中的getHead等相关的函数中的m_nHead数值会还是1,请问如何解决这个问题?

fhqiplj 2003-12-24
  • 打赏
  • 举报
回复
好像不行的

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧