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){}
 }

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



你可能感兴趣的:(vc,类,对象)