c++使用初始化列表来初始化字段】的更多相关文章

例题来看:请问下面程序打印出的结果是什么? #include <iostream> #include <string> using namespace std; class base { private: int m_i; int m_j; public: base(int i):m_j(i),m_i(m_j); ),m_i(m_j){} int get_i() {return m_i;} int get_j() {return m_j;} }; int main(int argc…
转自:http://www.cnblogs.com/kaituorensheng/p/3477630.html 1. 类成员为const类型 2. 类成员为引用类型 #include <iostream> using namespace std; class A { public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout << "hello:" << i <<…
构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序.成员被初始化的次序就是定义成员的次序.第一个被定义的成员先被初始化,依次类推.一般,初始化的顺序无关紧要,然而,如果一个成员是根据其他成员而初始化,则成员的初始化顺序是至关重要的. class x { int   i;//声明顺序是先i,后j,故初始化列表中,会先初始化i,在初始化j int   j; public: x(int  tem): j(tem),i(j){}    //看起来是先初始化j,然后初始化i,其实恰恰相反…
#include<iostream> using namespace std; class Student1 { private: int _a; int _b; public: void fprint() { cout << " a = " << _a << " " << "b = " << _b << endl; } //Student1(int i):b(i…
转载自:http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html 何谓初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段.在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示. struct foo { string name ; int id ; foo…
本文转载自http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html 感谢作者分享 何谓初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段.在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示. struct foo { string name ; int…
转自:http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html 何谓初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段.在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示. struct foo { string name ; int id ; foo(…
结论: 1.在C++中,成员变量的初始化顺序与变量在类型中的声明顺序相同,而与他们在构造函数的初始化列表中的顺序无关. 2.构造函数分为两个阶段执行:1)初始化阶段:2)普通的计算阶段,表现为赋值操作. 3.内置类型的成员不进行隐式初始化,所以对这些成员是进行初始化还是赋值无关紧要.但对于类类型的数据成员若未在初始化列表中显示初始化,而是在函数体内赋值,则相当于先调用类的默认构造函数进行初始化,再在函数体中赋值,相比于直接利用初始化列表,效率较低. 下述给出详细描述和实验分析. 转载:http:…
何谓初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段.在 C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示. struct foo { string name ; int id ; foo(string s, int i):name(s), id(i){} ; // 初始化列表 }; 构造函数的两个执行阶段 构造函数的执…
[c++]必须在类初始化列表中初始化的几种情况   1. 类成员为const类型   2. 类成员为引用类型   复制代码 #include <iostream> using namespace std;   class A {     public:         A(int &v) : i(v), p(v), j(v) {}         void print_val() { cout << "hello:" << i <<…
C++类构造函数初始化列表 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample {public:    int a;    float b;    //构造函数初始化列表    CExample(): a(0),b(8.8)    {}    //构造函数内部赋值    CExample()    {        a=0;        b=8.8;    }}; 上面的例子中两个构造函数的结果是一…
C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误 class ClassA{private ClassB arrayOfObjectClassB[2];public ClassA(int i):arrayObjectOfClassB[0](i),arrayObjectOfClassB[1](i)}arrayObjectOfClassB[0](i)这儿有问题   初始化列表中,只能初始化 单个变量 或 类的对象,不能初始化数组 数组作为成员变…
除了性能问题之外,有些时场合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化 成员变量的初始化顺序 成员是按照他们在类中出现的顺序进行初始化的,而不是按照他们在初始化列表出现的顺序初始化的 初始化顺序 构造函数初始化列表的变量优先于…
一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段 初始化段 普通计算段 (一).对象成员及其初始化  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40   #include <iostream> using  namespace std; class Object…
已经有个构造函数负责初始化,为什么还需要构造函数初始化表呢? 在以下三种情况下需要使用初始化成员列表:一,需要初始化的数据成员是对象的情况:二,需要初始化const修饰的类成员:三,需要初始化引用成员数据: 需要初始化引用成员数据 最近才发现C++可以定义引用类型的成员变量,引用类型的成员变量必须在构造函数的初始化列表中进行初始化.对于类成员是const修饰,或是引用类型的情况,是不允许赋值操作的,(显然嘛,const就是防止被错误赋值的,引用类型必须定义赋值在一起)因此只能用初始化列表对齐进行…
前言 在C++对象模型的那些事儿之四:拷贝构造函数中提到如果将一个对象作为函数参数或者返回值的时候,会调用拷贝构造函数,编译器是如何处理这些步骤,又会对其做哪些优化呢?本篇博客就为他家介绍一个编译器的优化操作:NRV,以及关于初始化列表的一些容易踩的"坑"! NRV NRV是named Return Value的缩写,翻译过来就是具名返回值优化,这个优化到底在编译层干了些什么事,我们先来看个例子: class Animal{ public: Animal(){ cout<<…
本文是Inside C++ Object Model Chapter 2 部分的读书笔记. 编译器如何处理初始化成员列表的. 下列情况中,必须要使用member initialization list进行data member 的初始化: 1) 当初始化一个reference member. 2) 当初始化一个const member. 3) 当调用一个base class 的constructor,而他拥有一组参数的时候. 4) 调用一个member class 的constructor ,而…
  类的成员初始化列表的初始化的基本语法,类的构造函数还可以运用此语法为其变量初始化: class Class { private: int a; int b; char ch; public: Class(int a, int b, char ch); }; Class::Class(), b(), char(A) // a(1), b(0), char(A) 为Class类为其初始化数据. { //插入代码 } 警告:不能将成员初始化列表语法用于除构造函数之外的其他 “类” 方法. 从概念上…
C++类中成员变量的初始化有两种方式:构造函数初始化列表和构造函数体内赋值. 一.内部数据类型(char,int……指针等) class Animal { public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } Animal(int weight,int height) //B函数体内初始化 { m_weight = weight; m_height = height; } pr…
成员的初始化列表和构造函数在对成员指定初值方面是不一样的.成员初始化列表是对成员初始化,而构造函数,是对成员赋值 成员初始化列表使用初始化的方式来为数据成员指定初值, 而构造函数的函数体是通过赋值的方式来给数据成员指定初值. 成员初始化列表是在数据成员定义的同时赋初值, 但是构造函的函数体是采用先定义后赋值的方式来做. 这样就限制了,有些情况必须用成员初始化列表. 在这四种情况下是必须要使用成员初始化列表来为这些类型的成员赋初值的: 初始化一个引用成员变量 初始化一个const变量 当我们在初始…
来源:http://blog.csdn.net/theprinceofelf/article/details/20057359 前段时间被人问及“初始化列表和构造有什么区别?”我竟一时语塞,只好回头 拿起几本C++的大部头书,打开VS2012和vim开始倒腾.最后总结出如下几点,希望 对大家理解C++能有些帮助.(题外话:我认为好的技术书籍和师者对人最大的帮助 就是:帮助学者节省时间.) 综合而言,C++中类的初始化操作有四个部分组成: 1.初始化列表:所有类非静态数据成员都可以在这里初始化,…
多个对象构造和析构 1对象初始化列表 1)对象初始化列表出现原因 1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数.这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数, 如果没有初始化列表,那么他将无法完成第一步,就会报错. 2.类成员中若有const修饰,必须在对象初始化的时候,给const int m 赋值 当类成员中含有一个const对象时,或者是一个引用时,他们也必须要通过成员初始化列表进行初…
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class Student { public: //构造函数初始化列表 Student():m_strName(){} //构造函数内部赋值 Student() { m_strName = "cjj"; m_iAge = ; } private: string m_strName; int m_iAge; }; 上面的例子中两个构造函数的结果是一样的.上面的构造函数(使…
一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段 初始化段 普通计算段 (一).对象成员及其初始化  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40   #include <iostream> using namespace std; class Object {…
上代码 #include <iostream> using namespace std; class A { public: A(int v): j(v + 2), i(j) {} void print_val() { cout << "hello:" << i << " " << j << endl;} private: int i; int j; }; int main(int argc ,…
三种情况下,必须在构造函数初始化列表中初始化成员: 1.const成员 2.引用成员 3.没有默认构造函数的成员…
如果一个类是这样定义的: Class A { public: A(int pram1, int pram2, int pram3); privite: int a; int &b; const int c; } 假如在构造函数中对三个私有变量进行赋值则通常会这样写: A::A(int pram1, int pram2, int pram3) { a=pram1; b=pram2; c=pram3; } 但是,这样是编译不过的.因为常量和引用初始化必须赋值.所以上面的构造函数的写法只是简单的赋值,…
参考资料: 1.黄邦勇帅 2.http://blog.163.com/sunshine_linting/blog/static/448933232011810101848652/ 3.http://www.cnblogs.com/zhoug2020/archive/2012/08/31/2665451.html 一.初始化列表 1.假如定义了类 www 则 www::www (int i, int j, int k):x (i), y(j), z(k){},定义了一个带 i,j,k 三个参数的构…
最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) 1 Widget::Widget(QWidget *parent) : 2 QWidget(parent) 3 { 4 } 为了统一回复大家,小豆君特意写了这篇文章,方便初学者们学习. 在讲解原因之前,先请大家看下面的一个例子 #include <iostream> using namespace…
一.前言     C++的学习中.我想每一个人都被变量定义和申明折磨过,比方我在大学笔试过的几家公司.都考察了const和变量,类型的不同排列组合,让你差别有啥不同.反正在学习C++过程中已经被折磨惯了,今天再来看看重温下那段"辉煌的历史".先来看一段代码: Player pa; // (a) Player pb(); // (b) Player pc = Player(); // (c) Player pd(Player()); // (d) pd = Player() // (e)…