c++ 中关于没有默认构造函数的成员类对象问题

c++中在一个类中定义成员类变量,该成员类变量必须要有默认构造函数(可以是自己定义的无参默认构造函数),否则会报错。

那么针对没有默认构造函数的成员类变量怎么定义呢?

在编写c++程序时,会碰到这样的问题:

class B{
         int a;
        public:
         B(int aa):a(aa){}//没有默认构造函数
       };
     class A{B b(4)};//在这一行,会报错,因为B没有默认构造函数

会产生错误error C2059: syntax error : 'constant'。

但是如果将代码改一下变成:

class B{
 int a;
 public:
 B(){}//自己写的默认构造函数
 };
 class A{
 B b;
 };

编译正常!无错误。

于是我们得出一个结论:定义一个成员类对象时,不能在一个类里面创建一个没有默认构造函数的类对象。

但是对于某些情况,必须创建一个没有默认构造函数的成员类对象该怎么办呢?

解决方法如下:

对于上面那段程序我们可以稍作改进:

class A
 {
     B b;
  public:
    A():b(4){}
 }

这样就没问题了。对成员类对象,要用初始化列表的方法初始化,也就是进入构造函数之前进行初始化,不管这个构造函数是有参还是无参的默认构造函数。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值