美文网首页
c++primer 练习题7.43-7.46

c++primer 练习题7.43-7.46

作者: 青吟乐 | 来源:发表于2019-05-01 17:13 被阅读0次

    7.43

    class NoDefault{
      public :
        NoDefault(int i){}//1,NoDefault的构造函数中有一个int型的参数
    };
    class C{
      public :
        C():member(0){}//3,初始化时要用NoDefault中的构造函数去初始化
      private:
        NoDefault member;//2,C中有一个NoDefault 对象成员
        
    }
    

    7.44有问题
    错误显示


    image.png

    就是说
    NoDefault 没有默认构造函数,要实例化NoDefault 对象的时候要给它int的参数,这样申请十个对象的vector时实例化是有问题的
    7.45
    合法了,因为C中有构造函数,并且c中的构造函数中使用NoDefault 对象成员的时候给了它int参数,是合法的

    其实7.44,7.45的根本症结在于
    NoDefault类我们显式的定义了一个带int参数的构造函数,所以在进行实例化的时候我们也必有显式的给出实例化对象的int型参数,7.44错在于无法给出这个int型参数,7.45中因为是C的实例化,在c的实例化的时候给出了默认的int型参数,所以7.45是合法的

    7.46
    1,不需要,若是我们不提供一个构造函数,类会默认提供一个隐式的构造函数,叫默认构造函数
    2,不一定,若是默认值都为空就是对的,但是我们显式定义默认的构造参数的时候,若是给出了默认值,那它的参数列表就不为空
    3,不对,类一定会提供默认的构造函数,为了防止出现实例化出问题也得提供一个构造函数
    4,默认构造函数是指xxx()的函数,若是我们没有显式的定义它,同时也没有定义其他带参数的构造函数,实例化的时候会生成相应类型的默认值,但是如果我们定义了其他的构造函数,实例化的时候则要看我们自己的选择。

    相关文章

      网友评论

          本文标题:c++primer 练习题7.43-7.46

          本文链接:https://www.haomeiwen.com/subject/biqwnqtx.html