zoukankan      html  css  js  c++  java
  • 对象 && 构造函数

    class A
    {
    public:
        int a;
        int b;
        int c;
                           //默认构造函数 };
    int main() {
    A a ;
    A e { }; A f ( );  //不行 A c {1,2}; A d {1,2,3}; }

    当对象的数据成员是public,在创建对象时可以在初始化列表中指定他们的值。

    class A
    {
    public:
        int a;
        int b;
        int c;
        A(int d,int e,int f) {}      //有参构造函数
    };
    int main()
    {
        A c1 {1,2};    //no instance of constructor "A::A" matches the argument list;
    A c2 {1,2,3};
    A c3 (
    1,2);    //no instance of constructor "A::A" matches the argument list; A c4 (1,2,3);
    A c5;       //no default constructor exists for class "A"
    }

    注意调用构造函数完全不同于包含公共数据成员值的初始化列表中提供的语句,而此处初始化列表包含构造函数的实参,有三个形参,所以初始化列表中必须有三个值。

    A c5;出错的原因是类缺少默认构造函数,默认构造函数被抑制了,需要自己重新定义。

    当已经存在带形参的构造函数,如果我们仍然希望声明没有初始化列表的对象,那么必须在自己的类中添加 默然构造函数的定义。

    可以如下方式添加默认构造函数:

      A()=default;

      A(){}

    class A
    {
    public:
        int a ;
        int b ;
        int c ;
        A(int d = 1, int e = 1, int f = 1)  {}    //含有默认值的构造函数
    
        ~A(){};
    };
    int main()
    {
        A a;
        A b;
        A e{};
        A c1{1,2};
        A c2{ 1,2,3};
        A c3( 1,2,3);
        A c4( 1,2);
        A d{};    
    }

    对于含有默认值的构造函数,就是默认构造函数,下面都一样

      A()=default;

      A(){}

      A(int d = 1, int e = 1, int f = 1) {} 

    在构造函数中使用初始化列表

      在构造函数头用初始化列表初始化数据成员,比使用赋值语句效率高,初始化列表总是在函数体之前执行,

      所以可以在构造函数中使用已初始化的数据成员

      A(int d = 1, int e = 1, int f = 1) :a{ d }, b{ e }, c{ f } {}      //使用初始化列表初始化数据成员

      A(int d = 1, int e = 1, int f = 1)                     //使用赋值语句初始化数据成员

      { a=d; b=e; c=f; }

    构造函数必须使用初始化列表的地方

    1. const 常量类型成员
    2.    &引用类型成员

    对于const和引用类型成员,只能使用成员初始化列表,不能再构造函数中使用赋值语句初始化。

    另外成员初始化顺序不同于在构造函数中的初始化列表中的顺序,而与在类定义中的顺序相同。

  • 相关阅读:
    vim encoding
    window线程间通信常用的三种方法
    Python与C之间的相互调用(Python C API及Python ctypes库)
    vim中去掉每一行的^M
    现实点,不要急! [ 公司软件过程改进案例]
    理解TCP/IP协议
    Linux下C/C++帮助手册安装方法 及使用方法
    MySQL主主高可用(keepalive)
    React获取DOM元素ref属性
    一些vue组件库
  • 原文地址:https://www.cnblogs.com/yunqie/p/5895758.html
Copyright © 2011-2022 走看看