是否可以在类定义中创建类的对象,而无需使用默认构造函数

时间:2011-10-04 11:09:04

标签: c++ constructor

是否可以在类定义中创建类的对象,而不使用默认构造函数?

class Vector3D {
public:
Vector3D(int x, int y, int z);
virtual ~Vector3D();

private:
int m_X;
int m_y;
int m_z;
};

class CustomClass {
private:
Vector3D m_Vec(50,50,50); //error
};

3 个答案:

答案 0 :(得分:5)

是的,可以这样做,但语法不同:

class Vector3D {
public:
Vector3D(int x, int y, int z);
virtual ~Vector3D();

private:
int m_X;
int m_y;
int m_z;
};

class CustomClass {
private:
Vector3D m_Vec;

public:
CustomClass(): m_Vec(50,50,50) {}
};

答案 1 :(得分:3)

class CustomClass { 
   private: 
     Vector3D m_Vec;
   public:
    CustomClass() : m_Vec(50,50,50) {}
}

答案 2 :(得分:1)

在(现在的)C ++ 11标准中,您实际上可以使用统一初始化非静态数据成员初始化程序N2756 ):

class CustomClass {
private:
   Vector3D m_Vec{50,50,50};
};

现在,问题是并非所有编译器都支持所有新功能。特别是gcc 4.7是第一个支持这种初始化形式的gcc版本。