У меня есть класс ..
class myClass
{
public:
myClass(int time);
}
Тогда мне нужно иметь этот класс в структуре.
class TopClass
{
public:
typedef struct{
int myint;
myClass myclass;
}tStruct;
tStruct sStruct1;
tStruct sStruct2;
}
Как мне это сделать? Как я могу вызвать конструкторы для myClass?
Есть только способ использовать класс вместо структуры?
Мой конструктор
TopClass::TopClass():
sStruct1({32, myClass(100)}),
sStruct2({52, myClass(1000)})
{
}
Но я получаю ошибку:
расширенные списки инициализаторов доступны только с -std = c ++ 0x или -std = gnu ++ 0x
Вы можете добавить конструктор в структуру: http://ideone.com/ifBw2
class TopClass
{
public:
struct tStruct {
tStruct(int time, int k = 0): myint(k), myclass(time) {}
int myint;
myClass myclass;
};
TopClass(int t): sStruct1(t), sStruct2(t) {}
tStruct sStruct1;
tStruct sStruct2;
};
редактировать
Что касается нового вопроса — вы должны использовать новый стандарт (-std=c++0x
) сделать это таким образом. В старом стандарте вы должны добавить явный ctor для инициализации переменных-членов. struct
в C ++ почти точно так же, как class
— Вы можете добавить ctors, функции-члены, статические функции. Единственная разница — конфиденциальность по умолчанию — общедоступная для struct
а также private
за class
:
class A {
public:
int b;
};
точно так же, как
struct A {
int b;
};
Как мне это сделать? Как я могу вызвать конструкторы для myClass?
Ваш struct
понадобится конструктор, так как он имеет член без конструктора по умолчанию. Чтобы иметь конструктор, ему также нужно иметь собственное имя, а не просто typedef
псевдоним.
struct tStruct {
// If you want a default constructor:
tStruct() : myClass(42) {}
// If you want to specify the time:
tStruct(int time) : myClass(time) {}
int myint;
myClass myclass;
};
Есть только способ использовать класс вместо структуры?
class
а также struct
означают одно и то же (кроме незначительного различия в наличии разных спецификаторов доступа по умолчанию). Все, что вы можете сделать с одним, вы можете сделать с другим.
На самом деле, ответ Павла Зубрицкого в порядке.
Но я хочу знать, почему вы должны сделать так, чтобы вы импортировали другой конструктор класса внутри TopClass.
Я имею в виду, что код должен следовать правилу высокой когезии и низкой связи.
В разработке программного обеспечения мы бы предпочлиcomposition
(важный режим проектирования) определению класса в нем. Что-то вроде следующего кода.
class B{
public:
B(int y){b = y;}
private:
int b;
};
class A {
public:
A(int x):b(x){...};
private:
B b;
};
Из кода мы можем максимизировать класс B и, очевидно, уменьшить сложность класса A. A & Б может изменить все самостоятельно.