看到网上一哥们的帖子  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. 深入了解当前ETL中用到的一些基本技术

    数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,是企业商务智能.数据仓库系统的重要组成部分.ETL是企业数据集成的概念出发,简要分析了当前ETL中用到的 ...

  2. PAT---1050. String Subtraction (20)

    #include<iostream> #include<string.h> #include<stdio.h> using namespace std; #defi ...

  3. switch vpn 配置

  4. 11.10 noip模拟试题

    1.第K小数 (number.cpp/c/pas) [问题描述] 有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数 相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少 ...

  5. 程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  6. C# 序列化和反序列

    1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Seri ...

  7. 如何创建一个自己的【Composer/Packagist】包

    首先让我们踏着欢快的脚步去Github创建一个新库,这里取名 composer-car,又欢快的将它克隆到本地: $ git clone git@github.com:victorruan/compo ...

  8. 分享:Svg文件转换为图片(调用 Inkscape 命令行)

    其实只是做了简单封装,可以方便进行批量转换. 获取Svg对象坐标的代码请看:根据svg节点对象类型和路径值转换坐标值, DrawingColor方法是进行颜色填充的. /// <summary& ...

  9. css - a:hover变色问题

    今天在帮我们学校做网站的时候,由于在css这里不是很擅长,过程中发现一个问题,a:hover的时候,字体的颜色不变.后来才发现将a和div的嵌套的问题, 我的css代码为: .left_box .lb ...

  10. CI 笔记7,easyui 异步加载

    在做后台导航时,需要异步加载,pid和id的循环问题,在controller中,建立另外一个方法,嵌套循环,查找是否pid〉1. public function nav_list() { $this- ...