64,632
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class A
{
public:
~A(){cout <<"~A()";}
};
class B
{
public:
virtual ~B(){cout <<"~B()";}
};
class C:public A,public B
{
public:
~C(){cout <<"~C()";}
};
int main()
{
C *c = new C;
B *b1 = dynamic_cast <B*>(c);
A *a2 = dynamic_cast <A*>(c);
delete c;
a2 = NULL;
if (b1 == NULL)
{
cout <<"################" <<endl;
return 1;
}
else
{
cout <<"@@@@@@@@@@@@@@" <<endl;
return 0;
}
}
1. 分析一下这段程序的输出 (Autodesk)
class B
{
public:
B()
{
cout<<"default constructor"<<endl;
}
~B()
{
cout<<"destructed"<<endl;
}
B(int i) : data(i) //B(int) works as a converter ( int -> instance of B)
{
cout<<"constructed by parameter " << data <<endl;
}
private:
int data;
};
B Play( B b)
{
return b ;
}
(1) results:
int main(int argc, char* argv[]) //constructed by parameter 5
{ //destructed B(5)形参析构
B t1 = Play(5); B t2 = Play(t1); //destructed t1形参析构
return 0; //destructed t2 注意顺序!
} //destructed t1
(2) results:
int main(int argc, char* argv[]) //constructed by parameter 5
{ //destructed B(5)形参析构
B t1 = Play(5); B t2 = Play(10); //constructed by parameter 10
return 0; //destructed B(10)形参析构
} //destructed t2 注意顺序!
//destructed t1
class A
{
public:
A(){cout<<"A construction"<<endl;}
~A(){cout<<"A destruction"<<endl;}
};
class B
{
public:
B(){cout<<"B construction"<<endl;}
~B(){cout<<"B destruction"<<endl;}
A a;
};
main()
{
B b;
}
则其结果如下:A construction
B construction
B destruction
A destruction