首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
有如下程序: #include<iostream> using namespace std; class A { public: A(){cout<<"A’;} ~A(){cout<<"~
有如下程序: #include<iostream> using namespace std; class A { public: A(){cout<<"A’;} ~A(){cout<<"~
admin
2013-02-27
87
问题
有如下程序: #include<iostream> using namespace std; class A { public: A(){cout<<"A’;} ~A(){cout<<"~A";} }; class B:public A { A*p; public: B(){cout<<"B";p=new A();} ~B(){cout<<"~B";delete p;} }; int main() { B obj; return 0; } 执行这个程序的输出结果是
选项
A、BAA~A~B~A
B、ABA~B~A~A
C、BAA~B~A~A
D、ABA~A~B~A
答案
B
解析
本题考查的是派生类对象的构造与析构。建立派生类对象时,构造函数的执行顺序如下:
(1)执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);
(2)执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);
(3)执行派生类的构造函数。
所以本题在建立派生类B的对象。obj时会先调用基类A的构造,然后调用自身的构造。注意:B类中定义的成员p是A类的指针而不是一个对象,故在调用自身构造函数前不需要构造。而在B类构造函数中使用new操作符动态构造了一个A类的对象,所以整个构造结果是输出:ABA。派生类对象的析构与构造严格相反,即先析构自身,然后析构自身所包含的成员对象,最后调用基类的析构函数。故本题中,当main()函数返回时,析构B类的对象obj:首先会调用~B(),接着再调用~A()。但是,在~B()函数中使用delete操作符释放了动态创建的A类对象,故整个析构所输出的结果是:~B~A~A。所以应该选择B。
转载请注明原文地址:https://kaotiyun.com/show/W7Vp777K
本试题收录于:
二级C题库NCRE全国计算机二级分类
0
二级C
NCRE全国计算机二级
相关试题推荐
有以下程序 #include<stdio.h> voidfun(intn) {staticintk=0; if(n<0){printf("-");n=﹣n;} k+=n%10;printf("%d,",k); if
有下列程序 #include<stdio.h> main() {FILE*fp; inti,a[6]={1,2,3,4.5,6}; fp=fopen("d.dat","w+b"); for(i=0;i<6;i++)
若有定义intw[3][5];,则以下不能正确表示该数组元素的表达式是()。
设有定义:struct{charmark[12];intnum1;doublenum2;}t1,t2;,若变量均已正确赋初值,则下列语句中错误的是()。
下列叙述中正确的是()。
在进行逻辑设计时,将E-R图中实体之间的联系转换为关系数据库的()。
某二叉树的前序序列为ABCDEFG,中序序列为DCBAEFG,则该二叉树的深度(根节点在第1层)为()。
以下选项中关于C语言算术表达式的叙述中错误的是()。
在公有派生的情况下,派生类中定义的成员函数只能访问原基类的
在一棵二叉树上第5层的结点数最多是
随机试题
下列关于我国条约缔约权行使的表述,符合法律规定的是()
正式规定三公均不参加政府机构的活动,只作为奖赏有功之臣的最高荣誉职衔的皇帝是()
病案管理人员的职责是
规定《药品经营质量管理规范》的具体实施办法、实施步骤的部门是
合并糖尿病的病人,术前准备中不恰当的是
张某与王某就土地权属发生争议,案件的承办人刘某是张某的儿媳妇,则下列说法错误的是()。
下列关于加工贸易报核的说法错误的是( )。
一只青蛙掉到一口深15米的井中,它每天向上跳4米,到晚上又下滑2米,那么第几天这只青蛙才能跳出井外?( )
我国《刑法》规定的应当减轻或者免除处罚的情节之一是()。
Whatwillthemandotonight?
最新回复
(
0
)