首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
有如下程序: #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
38
问题
有如下程序: #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://jikaoti.com/ti/IFL0FFFM
本试题收录于:
二级C题库NCRE全国计算机二级分类
0
二级C
NCRE全国计算机二级
相关试题推荐
以下涉及字符串数组、字符指针的程序段中,没有编译错误的是()。
若有定义floata=12.3f;doubleb=456.78;若想用printf函数输出a和b的值,关于输出格式,以下说法正确的是()。
有以下函数: intfun(char*x,char*y) {intn=0; while((*x==*y)&&*x!=’\0’) {x++; y++; n++; } returnn; }
若有定义语句doublex,y,*px,*py;,执行了px=&x;py=&y;之后,正确的输入语句是()。
下列叙述中正确的是()。
若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是()。
设二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为()。
下面表示纯虚函数的成员函数是()。
多态性分为两类:编译时的多态性和【】。
在C++中,用于实现运行时多态性的是()。
随机试题
下颌运动的决定因素中最为重要的是A.左侧颞下颌关节B.右侧颞下颌关节C.牙齿D.精神因,素E.牙周膜及颞下颌关节的本体感受器所引起的神经反射活动
关于宫颈扩张,描述正确的是
下述位于颅后窝的解剖结构是
下列哪些采购活动是合法的
下列各项地区中不得新建城市生活垃圾填埋场的有( )。
确定项目建设规模时应考虑的因素和内容包括()。
在采用成本加酬金合同价时,为了有效地控制工程投资,最好采用()确定的合同价。
下列各句中,不属于“花也在利用你”的一项是:根据本文提供的信息,下列推断正确的一项是:
直线x+2y+3=0Az的点P在x-y=1的上方,且P到直线2x+y-6=0的距离为,则点P的坐标是().
在使用查询设计器创建查询时,为了指定在查询结果中是否包含重复记录(对应于DISTINCT),应该使用的选项卡是( )。
最新回复
(
0
)