Можно ли создать объект класса внутри определения класса без использования конструктора по умолчанию - PullRequest
1 голос
/ 04 октября 2011

Можно ли создать объект класса внутри определения класса без использования конструктора по умолчанию?

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 ]

5 голосов
/ 04 октября 2011

Да, это можно сделать, но синтаксис другой:

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) {}
};
3 голосов
/ 04 октября 2011
class CustomClass { 
   private: 
     Vector3D m_Vec;
   public:
    CustomClass() : m_Vec(50,50,50) {}
}
1 голос
/ 04 октября 2011

В (ныне действующем) стандарте C ++ 11 вы можете сделать это, используя Равномерная инициализация и Инициализаторы нестатических элементов данных ( N2756 ):

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

Теперь проблема в том, что не все компиляторы поддерживают все новые функции. В частности, gcc 4.7 является первой из версий gcc, поддерживающих эту форму инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...