有哪位高手可以帮小弟我分析一下下面的这段小代码吗
有谁可以帮我分析一下下面的这段小代码吗?
有人可以帮我分析一下,下面的代码,为什么第一个输出结果是9,第二个输出结果会是2呢?
#include <iostream.h>
static int x;
class A
{
public:
A(){ cout<<"AA1"<<endl; x = 1; }
virtual ~A(){ cout<<"~A2"<<endl; x = 2; }
virtual void foo(){ cout<<"A::foo()A3"<<endl; x = 3;}
};
class B : public A
{
public:
B(){ cout<<"BB4"<<endl; x = 4; }
virtual ~B(){ cout<<"~B5"<<endl; x = 5; }
void foo(){ cout<<"B::foo()B6"<<endl; x = 6; }
void bar(){ cout<<"B::bar()"<<endl; foo(); }
};
class C : public B
{
public:
C(){ cout<<"CC7"<<endl;x = 7; }
virtual ~C(){ cout<<"~C8"<<endl; x = 8; }
void foo(){ cout<<"C::foo()C9"<<endl; x = 9 ;}
void bar(){ cout<<"C::bar()"<<endl; foo(); }
};
int main(void)
{
C testc;
testc.foo();
cout<<"1------------------------------------ "<< x<<endl;
((C)testc).foo();
cout<<"2------------------------------------ "<< x<<endl;
}
------解决方案--------------------
http://bbs.****.net/topics/390721140
------解决方案--------------------
构造和析构的顺序而已!
父类先构造,后析构!
有人可以帮我分析一下,下面的代码,为什么第一个输出结果是9,第二个输出结果会是2呢?
#include <iostream.h>
static int x;
class A
{
public:
A(){ cout<<"AA1"<<endl; x = 1; }
virtual ~A(){ cout<<"~A2"<<endl; x = 2; }
virtual void foo(){ cout<<"A::foo()A3"<<endl; x = 3;}
};
class B : public A
{
public:
B(){ cout<<"BB4"<<endl; x = 4; }
virtual ~B(){ cout<<"~B5"<<endl; x = 5; }
void foo(){ cout<<"B::foo()B6"<<endl; x = 6; }
void bar(){ cout<<"B::bar()"<<endl; foo(); }
};
class C : public B
{
public:
C(){ cout<<"CC7"<<endl;x = 7; }
virtual ~C(){ cout<<"~C8"<<endl; x = 8; }
void foo(){ cout<<"C::foo()C9"<<endl; x = 9 ;}
void bar(){ cout<<"C::bar()"<<endl; foo(); }
};
int main(void)
{
C testc;
testc.foo();
cout<<"1------------------------------------ "<< x<<endl;
((C)testc).foo();
cout<<"2------------------------------------ "<< x<<endl;
}
------解决方案--------------------
http://bbs.****.net/topics/390721140
------解决方案--------------------
构造和析构的顺序而已!
父类先构造,后析构!