首页 > 试题广场 >

下列程序的运行结果是 B1 1&B2&B1 2&B2&C 3

[单选题]
下列程序的运行结果是 B1 1&B2&B1 2&B2&C 3& ,请为横线处选择合适的程序()

#include<iostream>
using namespace std;
class B1
{
    public:B1(int i)
    {
    cout<<"B1"<<" "<<i<<"&";
    }
};
class B2
{
public:
    B2()
    {
        cout<<"B2"<<"&";
    }
};
class C: public B1, public B2{
public:
    C(int a, int b, int c):____
    {
    indiv=c;
    cout<<"C"<<" "<<indiv<<"&";
    }
    private:
    B1 ml;
    B2 m2;
    int indiv;
};
int main()
{
    Cc(1,2,3);
}
	


  • B1(a),m1(b)
  • B2(a),m2(b)
  • B1(a),B2(b)
  • m1(a),m2(b)
题目中答案少了个&,哪有正确答案??
发表于 2020-08-11 00:36:06 回复(0)
首先分析类B1和B2的构造函数:
B1有显式的构造函数且有参数,因此构造B1时必须使用带参形式   B1 ( i );
B2有显式的构造函数但是无参数,因此构造B2可以使用   B2 b2()或 B2 b2,两者均调用显示定义的构造函数;

其次分析类C:
C有两个基类B1、B2,因此首先需要执行B1和B2的构造函数;
C有两个成员对象m1,m2,因此需要分别执行B1和B2对这两个对象进行初始化;
所以按顺序执行以下构造函数B1 -> B2 -> B1 -> B2 -> C
观察输出结果B1 1&B2&B1 2&B2&C 3与前面结论相符;考虑输出中的1和2 两个参数值,所以带参构造顺序如下:
B1(1) -> B2() -> B1(2) -> B2() -> C(1,2,3)

最后结合以上两点分析结果:
将B2的构造函数省略即可得到 B1(a), m1(b)
发表于 2017-08-21 21:14:39 回复(6)
初始化父类后初始化自己的成员
发表于 2018-09-03 07:50:15 回复(3)
先构造自己的父类B1(a).B2,然后构造自己的成员m1.m2
发表于 2018-12-11 12:05:42 回复(0)
B1没有无参的构造函数,所以必须显式调用,B1没必要
发表于 2017-08-17 10:14:49 回复(0)
B2无参数,故不需要显示调用,B1(a), m1(b)这个顺序是因为第一个是调用基类构造函数,第二个是调用C类中对象的构造函数
发表于 2020-06-27 15:27:25 回复(0)
B1有显式的构造函数且有参数,因此构造B1时必须使用带参形式   B1 ( i );
B2有显式的构造函数但是无参数,因此构造B2可以使用   B2 b2()或 B2 b2,两者均调用显示定义的构造函数;

其次分析类C:
C有两个基类B1、B2,因此首先需要执行B1和B2的构造函数;
C有两个成员对象m1,m2,因此需要分别执行B1和B2对这两个对象进行初始化;
所以按顺序执行以下构造函数B1 -> B2 -> B1 -> B2 -> C
观察输出结果B1 1&B2&B1 2&B2&C 3与前面结论相符;考虑输出中的1和2 两个参数值,所以带参构造顺序如下:
B1(1) -> B2() -> B1(2) -> B2() -> C(1,2,3)

最后结合以上两点分析结果:
将B2的构造函数省略即可得到 B1(a), m1(b)
发表于 2022-07-11 20:10:20 回复(0)
完整答案: B1 1&B2&B1 2&B2&C 3&
发表于 2018-09-10 23:58:38 回复(0)
这道题答案错了啊,应该是a,编译器运行了的
发表于 2017-08-08 12:45:50 回复(1)
以前遇到的都是数据成员,这里是对象成员;
派生类负责基类的构造函数,所以B1B2分别调用了一次构造函数;
C类的对象成员的初始化,也需要调用该对象成员自己的构造函数——不知道有什么特别的深意,先记下好了。
发表于 2018-04-08 16:24:10 回复(0)
B2构造函数是无参的
发表于 2017-08-18 23:38:38 回复(0)
我选的A。
发表于 2017-08-09 12:19:23 回复(0)
B2无参数,不许要显示调用。先进行父类构造函数,再进行子类构造函数,先构造基类构造函数,再构造对象的构造函数
发表于 2023-03-18 10:38:54 回复(0)
<p>B1没有无参构造函数,所以必须显示调用B1的其他构造函数。先初始化基类,在初始化成员对象,最后调用自己的构造函数初始化自身</p>
发表于 2020-06-12 21:15:33 回复(0)
题目里的输出最后少了一个“&”。
发表于 2019-07-14 16:25:40 回复(0)

B1必须显示调用

发表于 2019-06-25 18:22:04 回复(0)