`

关于构造函数初始化列表顺序的面试题

    博客分类:
  • C++
阅读更多
#include <iostream>
#include <string>

using namespace std;

class base
{
private:
        //调换下面两个声明则会输出预想的98,98.否则输出结果第一个为随机数,第二个
        //为98
	int m_i;
	int m_j;
public:
	base(int i) : m_j(i), m_i(m_j) {}
	base() : m_j(0), m_i(m_j) {}

	int get_i() {return m_i;}
	int get_j() {return m_j;}
};

void main()
{
	base obj(98);
	cout << obj.get_i() << endl
		 << obj.get_j() << endl;
	system("pause");
}


分析:初始化列表的初始化顺序是根据成员变量的声明顺序来执行的,所以m_i会被赋值为一个随机数。更改一下成员变量的申明顺序可以得到预想的结果。
分享到:
评论

相关推荐

    C++与操作系统等面试题49

    这意味着即使你在成员初始化列表中改变了变量的初始化顺序,实际的执行顺序仍遵循类中的声明顺序。 3. **成员初始化列表与构造函数体的关系**:成员初始化列表中的初始化操作会在任何构造函数体内的代码执行之前...

    C++与操作系统等面试题52

    在C++中,成员初始化列表是一种特殊的语法结构,用于在构造函数体外部指定类的数据成员的初始化顺序。成员初始化列表提供了更高效、更安全的初始化方式。当一个类包含多个数据成员时,成员初始化列表允许程序员明确...

    C++面试题,公司面试必备

    25. **对象成员初始化顺序**:初始化顺序由成员声明的顺序决定,与初始化列表中的顺序无关。 26. **类与对象关系**:类是对象的模板,对象是类的具体实例。 27. **访问属性**:类的成员可以是public(公共)、...

    C++经典面试题全集

    12. 初始化成员列表通常用于常量成员初始化、对象成员初始化(没有无参构造函数)以及引用成员初始化。 13. 常对象是对象的常量版本,其成员无法被修改,确保了对象的不可变性。 14. 静态成员函数的作用在于提供对...

    C/C++面试题大全

    11. **构造函数调用顺序**:首先调用基类构造函数,然后按声明顺序初始化数据成员,最后调用自己的构造函数。 12. **初始化成员列表**:在类有常量成员、无参构造函数的对象成员或引用成员时,必须使用初始化成员...

    C++与操作系统等面试题51

    3. **成员变量的初始化**:在构造函数体之前,根据成员初始化列表中的顺序初始化所有成员变量。成员变量的初始化必须在构造函数体执行之前完成,并且在`vptr`(虚函数表指针)被设定之后进行。这意味着成员变量的...

    C++与操作系统等面试题29

    如果一个类继承了多个基类,则基类构造函数的调用顺序取决于它们在派生类继承列表中的顺序,而不是它们在成员初始化列表中的顺序。例如,考虑以下代码片段: ```cpp class Base1 { /*...*/ }; class Base2 { /*.....

    一道关于实例化顺序的C#面试题

    "C#实例化顺序面试题详解" 在这道关于实例化顺序的C#面试题中,我们可以总结出以下几个重要的知识点: 1. 内联(inline)方式初始化字段:在C#中,我们可以使用内联方式来初始化字段,这是一种简化的语法。例如:`...

    C#.NET面试题基础篇答案

    本文将对C#.NET面试题基础篇答案进行详细解释,涉及栈和堆的区别、委托、静态构造函数、CTS、CLS、CLR、值类型和引用类型、类和结构的区别、新关键字的作用、可空类型、值传递和引用传递、参数传递ref和out的区别、...

    C/C++经典面试题

    25. 成员初始化顺序:由声明顺序决定,而非初始化列表中的顺序。 26. 类与对象关系:类是对象的模板,对象是类的具体实例。 27. 访问属性:public、protected、private,分别代表公有、受保护和私有。 28. const...

    c++面试题全集收集的比较齐全的面试题

    - 成员对象的初始化顺序取决于它们在类中的声明顺序,而不是初始化列表中的顺序。 11. **类与对象的关系** - 类是对象的抽象定义,而对象则是类的具体实例。 12. **成员访问控制** - 类的成员可以根据需要设置...

    c++面试题大全

    11. **构造函数调用顺序**:首先调用基类构造函数,然后按声明顺序初始化数据成员,最后执行自己的构造函数体。 12. **初始化成员列表**:在类的成员是常量、对象或引用时,必须使用初始化成员列表。 13. **常对象...

    Java面试题以及答案整理.pdf

    初始化顺序为:静态初始化块 -&gt; 构造器 -&gt; 实例初始化块。 12. **内部类的实现方式** 内部类分为:成员内部类、局部内部类、匿名内部类和静态内部类。 13. **Java实现排序和序列化** 可以使用Java内置的`...

    C++程序员面试题集

    知识点:构造函数的调用顺序是先调用基类构造函数,然后初始化数据成员,最后调用自己的构造函数。 12. 哪几种情况必须用到初始化成员列表? 答:类的成员是常量成员初始化;类的成员是对象成员初始化,而该对象...

    C++面试题

    对对象成员的初始化顺序不受初始化列表的影响,而是由成员在类中的声明顺序决定。类与对象之间的关系是类是对象的抽象,对象是类的实例。类的成员访问属性有public、protected和private之分。 指针与const的结合...

    C++经典面试题 附带参考答案.docx

    构造函数的调用顺序是:先调用基类构造函数,按声明顺序初始化数据成员,最后调用自己的构造函数。 在某些情况下必须重写拷贝构造函数,如当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深...

    Autodesk面试题70道

    2. **成员变量初始化顺序**:在C++中,构造函数初始化列表中的顺序不影响成员变量的实际初始化顺序,它们会按照在类定义中的声明顺序进行初始化。 3. **双链表实现**:双链表包含一个指向前一个节点的指针和一个...

    C++面试题全集

    对象成员的初始化顺序由它们在类中声明的顺序决定,而不是由初始化列表中的顺序决定。这意味着即使初始化列表中的顺序不同,成员变量也会按照声明顺序进行初始化。 #### 26. 类与对象的关系 类是对一组相似对象的...

    深圳各公司java面试题

    给定的代码片段展示了静态初始化块和构造函数的调用顺序。当创建`B`类的实例时,首先执行`A`类的静态初始化块,然后是`B`类的静态初始化块,之后是`A`类的构造函数,最后是`B`类的构造函数。因此,输出结果为"1AaB...

Global site tag (gtag.js) - Google Analytics