写出下段程序的输出:
- #include<iostream>
- using namespace std;
- class Value
- {
- public:
- Value()
- {
- cout << "Value()/n";
- }
- Value(int nVal)
- {
- m_nVal=nVal;
- printf("Call Value::Value(int nValue)/n");
- }
- ~Value()
- {
- printf("Call Value::~Value()/n");
- }
- Value& operator=(int nVal)
- {
- m_nVal=nVal;
- printf("Call Value::operator=/n");
- return *this;
- }
- void Dump()
- {
- printf("Value::m_nVal=%d/n",m_nVal);
- }
- protected:
- int m_nVal;
- };
- class Base
- {
- public:
- Base() {Init();}
- virtual ~Base() {Release();}
- virtual void Init() {printf("Call Base::Init()/n");}
- virtual void Release() {printf("Call Base::Release()/n");}
- virtual void Dump() {printf("Call Base::Dump()/n");}
- };
- class Derive:public Base
- {
- public:
- void change()
- {
- m_Val = 23;
- }
- Derive()
- {
- printf("Call Derive::Derive()/n");
- }
- ~Derive()
- {
- printf("Call Derive::~Derive()/n");
- }
- virtual void Init()
- {
- m_Val=2;
- printf("Call Derive::Init()/n");
- }
- virtual void Release()
- {
- printf("Call Derive::Release()/n");
- }
- virtual void Dump()
- {
- m_Val.Dump();
- }
- protected:
- static Value m_Val;
- };
- Value Derive::m_Val=0;
- //Value Derive::m_Val= m_Val.operator=(0);
- void DestroyObj(Base* pOb)
- {
- pOb->Dump();
- delete pOb;
- }
- void DestroyObj(Base pOb)
- {
- pOb.Dump();
- }
- int main()
- {
- Derive *pOb=new Derive;
- DestroyObj(pOb);
- system("pause");
- return 0;
- }
- /*
- 输出:
- Call Value::Value(int nValue)
- Call Base::Init()
- Call Derive::Derive()
- Value::m_nVal=0
- Call Derive::~Derive()
- Call Base::Release()
- Call Value::~Value()
- */
将main函数改为
- int main()
- {
- Derive pOb;
- DestroyObj(pOb);
- return 0;
- }
并添加一函数:
- void DestroyObj(Base pOb)
- {
- pOb.Dump();
- }
输出为:
Call Value::Value(int nValue)
Call Base::Init()
Call Derive::Derive()
Call Base::Dump()
Call Base::Release()
Call Derive::~Derive()
Call Base::Release()
Call Value::~Value()
总结:
static 数据在main函数执行以前就已经创建了。
Value Derive::m_Val=0;
这句话调用了Value的构造函数Value(int)。
3131

被折叠的 条评论
为什么被折叠?



