• 构造函数


    一、注意:

    1、构造函数不能被申明成const;

    2、直到构造函数完成初始化过程,类成员才能取得const属性,所以可以在构造函数中初始化const对象;

    二、默认构造函数;

    1、如何定义类的默认构造函数?

    Sales_data() = default;

    1、初始化 & 默认构造函数,注意区别;

    1、默认构造函数可以自己定义!在未定义任何构造函数的情况下,会自动合成一个默认构造函数;(不过如果类内部有自定义的类,难保证其定义了默认构造函数;)

    2、默认构造函数与无参构造函数是一回事,术语“默认构造函数”并不是指没有声明任何构造函数,就生成一个构造函数;而是指如果没有参数,构造函数就采用默认值;(这句话好像也没说明白,默认值是?)

    3、如果声明了一个默认构造函数或者其他构造函数,编译器就不会再自动生成默认构造函数;

    提醒:一旦声明了,就应该定义,不然调用会报错;

    而且调用格式应该与声明格式一致;参数列表要一致;

    4、调用默认构造函数,在实例化时,应该这样调用默认构造函数:SpreadsheetCell  myCell;不可这样:SpreadsheetCell myCell( );

    5、堆中对象,可以这样调用默认构造函数:auto  smartCellp=make_unique<SpreadsheetCell>();或者 SpreadsheetCell * myCellp=new SpreadsheetCell( );SpreadsheetCell * myCellp=new SpreadsheetCell;delete myCellp;myCell=nullptr;

    6、显示删除构造函数

    可以定义一个只有静态方法的类,这个类没有任何构造函数,也不想让编译器生成构造函数的话;

    class myClass
    {
    public:
            MyClass( ) = delete;
    };

    7、合成默认构造函数(最好自定义默认构造函数)

    (1)只有类在类不包含任何构造函数的情况下,才会合成默认构造函数;

    (2)只有类包含的内置类型、或复合类型的成员被赋予了类内初始值时,才适合合成默认构造函数;

    (3)如果类内成员没有默认构造函数,将无法初始化;必须自定义默认构造函数;

    (4)其他

    三、构造函数初始化器

    1、格式:

    Sales_data(const std::string &s, unsigned n, double p): bookNo(s),units_sold(n), revenue(p*n) { 函数体}

    Sales_data(const std::string &s, unsigned n, double p): bookNo{s},units_sold{n}, revenue{p*n} { 函数体}   C++11中规定的用花括弧代替圆括弧进行初始化;

    explicit  IntCell(int initialValue = 0): storedValue{ initialValue}{ }   这里有默认初始值

    2explicit 构造函数

    应使所有的单参数构造函数为explicit,以避免后台类型转换;

    3、区别   (与构造函数体内初始化数据成员的区别)

    1)存在const数据成员(对象被创建以后,该成员无法被修改),只能在初始化列表中初始化;

    2)数据成员本身就是一个类类型,且没有0作为参数的构造函数,那么。。。;

    当C++创建某个对象时,必须在调用构造函数之前创建对象的数据成员;

    如果类的数据成员本身就是个对象,那么在创建这些数据成员时,必须为其调用构造函数;(如果其构造函数调用失败,会导致数据成员对象生成失败);

    当在构造函数体内给某个对象赋值时,并没有真正创建这个对象,而只是改变对象的值;??

    3)构造函数初始化器ctor-initializer允许在创建数据成员时执行初始化;而且效率高;

    4)初始化顺序:按照类定义中声明的顺序而不是初始器列表的顺序;

    5)初始化时,可以调用类中的其它函数???

    8、赋值构造函数

  • 相关阅读:
    MSSQL复制表
    分享职场心得《7》
    分享职场心得《2》
    分享职场心得《3》
    免费收录网站搜索引擎登录入口最新版
    读写分离,读写分离死锁解决方案
    分享职场心得《5》
    分享职场心得《6》
    分享职场心得《1》
    分享职场心得《4》
  • 原文地址:https://www.cnblogs.com/wllwqdeai/p/10140655.html
Copyright © 2020-2023  润新知