看到网上一哥们的帖子  http://blog.csdn.net/maray/article/details/7761709 东西不多就转发了
1 #include <iostream> using namespace std; class Element
{
public:
Element(int e = ) : elem(e)
{
cout << "element 1" << endl;
}
int elem;
}; class ArrayHelper
{
public:
ArrayHelper()
{
cout<< "cons 1" << endl;
}
ArrayHelper(int size) : val(size)
{
cout<< "cons 2" << endl;
}
ArrayHelper(const ArrayHelper &other)
{
cout<< "cons 3" << endl;
val = other.val;
} ArrayHelper &operator=(const ArrayHelper &other)
{
cout<< "cons 4" << endl;
val = other.val;
s = other.s;
return *this;
}
public:
int val;
Element s;
};
int main()
{
ArrayHelper x;
ArrayHelper m();
ArrayHelper v = m;
v = m;
cout<< v.val << endl;
}
打印结果
element 1
cons 1
element 1
cons 2
element 1
cons 3
cons 4
12
说明:
我们经常会弄混到底是类定义的对象先执行构造函数,还是类里面的其它类对象先执行.弄不清这个问题是因为没弄清参数列表.
我们知道下面的情况必须要用参数列表:
class A
{
public:
A():i(3) {};
const int i;
int j;
}
可以看到i的初始化工作是在参数列表中完成的,在构造函数的函数体(花括号内仅仅是赋值而已).那么j呢,参数列表中没写j的话j的初始化工作在哪里完成? 答案是虽然没写但是j的初始化也是在初始化列表中完成的.
看下面的例子
class B
{
public:
int b;
B& operater = (const B& T){
this->b = 3;
return *this; }
B(const B& T){
this->b = 4;}
}
class A
{
  public:
B m_b;
//type1
A(const B& T) : m_b(T){}
//type2
A(const B& T){ m_b = T;}
}
当A用type1的构造函数的时候m_b.b等于几? 当A用type2的构造函数的时候m_b.b等于几?

type1下结果: 
3
3
type2下结果
3
4 所以,不管有没有参数列表,成员变量都是在参数列表中定义的.然后才会执行花括号内部的东西

c++构造函数谁先执行的问题的更多相关文章

  1. C++-理解构造函数、析构函数执行顺序

    先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...

  2. 由阿里巴巴一道笔试题看Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序

    一.阿里巴巴笔试题: public class Test { public static int k = 0; public static Test t1 = new Test("t1&qu ...

  3. laravel构造函数和中间件执行顺序问题

    今天想重构下代码结构: BaseController.php 放置公共的中间件 class BaseController { public function __construct(){ $this- ...

  4. 在java类中,是先执行类的构造函数还是先执行类的私有非静态变量

    举例子: package test_instance; public class TestClassLoaderTime { public TestClassLoaderTime(){ System. ...

  5. java 构造函数是如何执行的

    1.构造函数不是方法!! 原因1:方法的话,会直接执行方法体内的代码,但是构造函数首先执行的不是{}里的代码块,而是给对象的成员初始化: 2.方法可以被调用其他方法调用,但是构造函数不能被方法或变量调 ...

  6. java 调用静态方法和构造函数和静态块执行的先后顺序

    构造方法是只有你在new对象的时候才会执行,静态语句块和静态方法在类加载到内存的时候就已经执行了,另外,静态语句块只能给静态变量赋值,里面不能出现方法,同样,静态方法里面也不能出现静态语句块 追问: ...

  7. 构造代码块、构造函数、this执行顺序

    一.构造函数 对象一建立就会调用与之对应的构造函数. 构造函数的作用:可以用于给对象进行初始化. 构造函数的小细节:当一个类中没有定义构造函数时,系统会默认给该类加一个空参数的构造函数:当在类中自定义 ...

  8. 关于构造函数及参数执行顺序说明(c#)

    原文:https://blog.csdn.net/junmail/article/details/83249186 构造函数的执行顺序: 子类静态变量>子类静态构造函数>子类非静态变量&g ...

  9. C++构造函数和析构函数执行顺序

    四种情况:1. 创建一个类指针时,调用其构造函数:删除当前指针时,自动调用其析构函数.2. 创建子类对象指针时,首先调用其父类的构造函数,然后调用子类的构造函数:删除当前指针时先调用子类的析构函数,然 ...

随机推荐

  1. WEB DYNPRO SAP HELP

    http://help.sap.com/saphelp_nw70ehp1/helpdata/EN/43/70d83e8cb23d67e10000000a114084/content.htm

  2. 【转】Android 混淆代码总结

    http://blog.csdn.net/lovexjyong/article/details/24652085 为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的 ...

  3. [Oracle] - 性能优化工具(5) - AWRSQL

    在AWR中定位到问题SQL语句后想要了解该SQL statement的详细运行计划,于是就用AWR报告中得到的SQL ID去V$SQL等几个动态性能视图中查询,但发现V$SQL或V$SQL_PLAN视 ...

  4. linux下64位汇编的系统调用系列

    http://blog.csdn.net/mydo/article/category/3084893

  5. 关于Clone 的方法使用

    package cn.hncu.day7.clone.v1;//克隆的套路:// 第1步:重写User类的clone()方法,以供外面调用.因为外面的类无法直接调用User类父类中的clone()方法 ...

  6. 也谈android开发图像压缩

    long long ago,给学院做的一个通讯录App需要有一个上传图像的功能,冥思苦想,绞尽脑汁后来还是没解决(学生时代的事),于是就直接上传原图了,一张图片2M到3M,这样我的应用发布之后,那绝对 ...

  7. C++ 读取XML文件(tinyXML库的应用)

    C++读取xml有很多第三方的xml解析库,最近使用tinyxml库来解析,下面直接上应用例子: Skin.xml文档内容如下: <UI> <Image name="ban ...

  8. Android pulltorefresh引用遇到的一个问题

    今天在使用pulltorefresh插件的时候遇到了一个让人头疼的问题,在Eclipse中导入要用到的library项目,然后新建一个项目引入Library,显示的是引入成功,如图 而且project ...

  9. Android Studio中常用插件及浅释

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园:追风917 插件可以来这个仓库查找:Android Studio Plugins 这里给出几个平时常用到的as插 ...

  10. Eclipse出现the type java.lang.CharSequence can't be resolved.

    出现这个问题我们需要安装一下JRE1.7这个版本,然后再项目里引入一下就可以了.