首页 > 试题广场 >

下面的程序输出可能是什么?

[单选题]
下面的程序输出可能是什么?
class Printer{
    public:
        Printer(std::string name) {std::cout << name;}
};
class Container{
    public:
        Container() : b("b"), a("a") {}
    Printer a;
    Printer b;
};
int main(){
    Container c;
    return 0;
}
  • 可能是 "ab" 或 "ba"。 依赖于具体的实现
  • 一直都是 "ba"
  • 一直都是 "ab"
难道不应该把printer a 和printer b 放在cootainer的构造函数的大括号里面么?主函数中只是创建对象,调用构造函数。如果将他们放在构造函数里面才会打印出结果吧😊
发表于 2017-06-05 12:47:57 回复(0)
初始化列表要注意,这道题故意写成b("b"), a("a") ,其实还是按类中声明变量的先后顺序来初始化,与初始化列表的顺序无关。
发表于 2015-09-13 10:28:13 回复(3)
答案C:一直都是ab。
派生类实例化时,先调用基类的构造函数,然后是派生类的类成员变量构造函数(构造的顺序是按照成员变量的定义先后顺序,而不是按照初始化列表的顺序),最后是派生类的构造函数。
程序中,先定义了 Printer a;后定义了Printer b;所以输出一定是ab。
#include<iostream>
#include<string>
using namespace std;
class Printer{
    public:
        Printer(std::string name) {std::cout << name;}
};
class Container{
    public:
        Container() : b("b"), a("a") {}
    Printer a;
    Printer b;
};
int main(){
    Container c;
    return 0;
} 

发表于 2015-09-05 12:38:53 回复(8)
初始化列表的初始化顺序  与在列表中的顺序无关,由变量在类中定义的先后顺序决定
发表于 2016-06-20 10:08:34 回复(0)
初始化根据类成员定义的顺序,与初始化列表中的书写的顺序没有关系。
发表于 2016-05-21 15:10:33 回复(0)
C++ primer 第四版,P389。 2.成员初始化的次序
发表于 2015-09-06 15:23:29 回复(0)
在初始化列表中初始化成员的次序与该成员在初始化列表中出现的先后次序没有关系,真正的初始化次序与成员变量在类中生成的先后次序保持一致,所以应该是“ab”
发表于 2022-09-26 11:50:20 回复(0)
按照成员变量的声明顺序,来初始化变量
发表于 2024-03-16 22:30:21 回复(0)
变量的初始化顺序是按照声明变量的先后顺序来排的
发表于 2023-07-16 23:21:13 回复(0)
类成员的构造顺序和初始化列表顺序无关
发表于 2022-09-23 18:39:20 回复(0)
按照定义的顺序进行初始化
发表于 2018-09-02 14:37:21 回复(0)
初始化列表要注意,这道题故意写成b("b"), a("a") ,其实还是按类中声明变量的先后顺序来初始化,与初始化列表的顺序无关。
发表于 2018-04-28 20:52:11 回复(0)
初始化列表是按声明的顺序进行赋值的
发表于 2017-10-07 08:53:50 回复(0)
初始化根据类成员定义的顺序,与初始化列表中的书写的顺序没有关系。
发表于 2017-04-24 10:22:16 回复(0)
构造的顺序是按照成员变量的定义先后顺序,而不是按照初始化列表的顺序
发表于 2017-03-02 22:05:18 回复(0)
按照声明的次序初始化,而不是初始化列表。看的c++内存模型介绍的
发表于 2017-02-24 11:11:53 回复(1)
多么痛的领悟:不是看初始化列表而且看成员变量声明的顺序
发表于 2016-10-31 18:34:41 回复(0)
继承时,子类对象创建时构造函数的调用顺序是,先调用父类构造函数,再调用类中其他类的对象成员构造函数( 此时按照对象成员在类中的定义顺序而不是在初始化列表中的顺序 调用构造函数 ),最后才是自己构造函数。
编辑于 2016-09-28 12:23:44 回复(0)
http://blog.csdn.net/zerocboy/article/details/51638226
先执行基类的(如果基类当中有虚基类,要先执行虚基类的,都是按照继承时的顺序依次执行),再执行成员对象的(声明的顺序),最后执行自己的。(切记都不是初始化列表的顺序)
发表于 2016-06-12 15:51:34 回复(0)
类中的数据成员变量的构造函数调用顺序是根据定义的顺序,所以答案是ab。
发表于 2015-09-07 20:43:46 回复(0)