`

C++初始化列表

阅读更多
摘抄:钱能的《C++程序设计教程》

一、需要初始化的数据成员是对象的情况;
二、需要初始化const修饰的类成员;
三、需要初始化引用成员数据;
四、注意,初始化的先后顺序有区别的!从上到下,从左到右。
class point
{
private:
    int x,y;
public:
    point(int m=0,int n=0):x(m),y(n)
    {
        x=m;
        y=n;
    }
    ……
};


一、需要初始化的数据成员是对象的情况;


class AAA
{
private:
    int aa;

public://正规初始化
    AAA(int i):aa(i){}

//public://这叫赋值
//    AAA(int i)
//    {
//        aa = i;
//    }
};


class BBB
{
private:
    AAA oo;

public:
    BBB(int i):oo(i) { }
};





二、需要初始化const修饰的类成员;
三、需要初始化引用成员数据;

因为常量(const)是不能被赋值的;
引用也不能重新指派。


class Test
{
private:
    const int boy;
    int& girl;

public:
    Test(int i, int& j):boy(i), girl(j) { }
};



我的测试
#include <iostream>
using namespace std;

class TestInit
{
    int aa;
    int bb;
public:
//  情况一:无构造方法,使用自带的,结果   aa = 0 bb = 0

//  情形二:自定义构造方法,但不作为,结果  aa = 2147348480 bb = 30089830
//    TestInit( ){}

//  情形三:使用初始化列表,先a再b,结果    aa = -1 bb = -1
//    TestInit( ):aa(-1), bb(aa) {}    

//  情形四:同上,但是先b再a,结果          aa = 30089830 bb = -1
//    TestInit( ):bb(-1), aa(bb) {}     

    void print() 
    { 
        cout<<"aa = "<<aa<<" bb = "<<bb<<endl; 
    }
};

int main()
{
    TestInit( ).print();
    return 0;
}




分享到:
评论

相关推荐

    C++构造函数初始化列表

    ### C++构造函数初始化列表详解 在C++编程语言中,构造函数是对象生命周期开始时自动调用的特殊成员函数,用于初始化对象的状态。构造函数初始化列表是C++中一个非常重要的特性,它允许程序员在对象创建时直接对类...

    c++初始化列表和构造函数初始化区别.pdf

    c++初始化列表和构造函数初始化区别.pdf

    C++初始化成员列表.

    C++初始化成员列表 C++语言中的初始化成员列表是一种特殊的语法结构,它允许在构造函数中对类的成员变量进行初始化。这种机制可以解决一些特殊的问题,如成员变量是类类型且没有默认构造函数的类,或者const成员或...

    C++ 初始化列表详解及实例代码

    C++ 初始化列表是C++编程中一个非常重要的概念,它允许我们在创建对象时直接指定成员变量的初始值。初始化列表以冒号开头,后跟一系列以逗号分隔的成员变量及其对应的初始值,形式如下: ```cpp struct foo { ...

    C++使用初始化列表的方式来初始化字段的方法

    C++使用初始化列表的方式来初始化字段的方法 C++语言中,初始化列表是一种常用的初始化对象成员的方法。今天,我们来探讨C++使用初始化列表的方式来初始化字段的方法。 首先,让我们了解什么是初始化列表。初始化...

    C++中成员初始化列表的使用

    ### C++中成员初始化列表的使用 在C++编程中,成员初始化列表是一个非常重要的概念,尤其是在类的设计和实现过程中。本文将详细解释成员初始化列表的概念、用途以及它与传统构造函数内初始化的区别,并通过具体示例...

    C++初始化列表学习

    何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的克访问性不同...

    C++全局变量初始化的一点总结

    C++中的全局变量初始化是一个重要的话题,涉及到程序的正确性和可预测性。全局变量,即具有静态存储期的变量,其生命周期始于程序开始,终于程序结束。本文将深入探讨全局变量初始化的时机、方式以及一些处理特殊...

    关于C++类的成员初始化列表的相关问题

    C++类的成员初始化列表是构造函数中一种特殊的形式,用于在对象实例化时直接对类的成员变量进行初始化。这种列表在特定情况下是必要的,因为它可以提高代码的效率并确保正确的初始化顺序。 首先,成员初始化列表在...

    c++ 构造函数的初始化列表

    在C++编程语言中,构造函数的初始化列表是一种特殊的语法结构,用于在创建对象时初始化其成员变量。这个列表并不决定初始化的顺序,因为初始化顺序总是按照成员在类定义中的声明顺序进行。这一点在给定的描述和代码...

    c++程序设计

    本文将深入探讨C++初始化列表的使用方法及其重要性。 初始化列表的基本语法是通过在构造函数的括号内使用冒号(:)后跟随一组以逗号分隔的成员变量名和它们的初始值。例如: ```cpp class MyClass { public: int ...

    cpp代码-C++:初始化列表:1.向数据成员传递值

    在C++编程语言中,初始化列表是一个非常重要的概念,它在创建对象时用于设置成员变量的初始值。本文将深入探讨C++中的初始化列表,尤其是如何通过初始化列表向数据成员传递值。 首先,让我们理解什么是初始化列表。...

    解决C++全局变量只能初始化不能赋值的问题

    C++中,全局变量只能声明、初始化,而不能赋值 也就是说,下面这样是不被允许的: #include using namespace std; int a; a = 2; int main() { return 0; } 错误提示是: C++ requires a type specifier for all...

    成员初始化列表与构造函数体中的区别详细解析

    C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,...

    C++类成员和数据成员初始化总结

    3. **const 数据成员**必须在构造函数的初始化列表中初始化,因为它们是不可修改的,所以在构造函数体中赋值是不允许的。 4. **static 数据成员**则需要在类的外部初始化,因为它们是属于类的所有对象共享的,而不是...

    c++能不能给类的成员变量在声明的时候初始化? - life_limbo - 博客园1

    2. **初始化列表初始化**:接着执行构造函数的初始化列表,其中的初始化顺序与成员变量声明的顺序一致,而不受初始化列表中实际顺序的影响。例如`A(int a_):a(a_){};` 3. **构造函数体内的初始化**:最后执行构造...

    FFMPEG C++封装库使用示例之初始化

    在这个"FFMPEG C++封装库使用示例之初始化"中,我们将深入探讨如何初始化 FFmpeg C++ 封装库,并了解如何打印其支持的多种格式。 首先,FFmpeg 的初始化通常涉及两个主要步骤:静态链接库和动态加载库。在 C++ 封装...

    C++ 构造函数初始化列表的好处

    使用初始化列表完成这步操作在性能上有益处。什么好处呢?摆道理显得不够彻底。看书不如做实验。让我们结合执行过程来查看。考虑如下示例代码:  Derive 类构造函数两个 Base 类型的参数,分别赋给该类两个 ...

Global site tag (gtag.js) - Google Analytics