скажем, у меня есть класс «Simple» с этим закрытым var: std :: vector m_listePoint; какой конструктор
Simple(EnumCouleur::tEnumCouleur c,vector<Point> listeP);
(couleur наследуется от ее матери класса)
у меня есть другой класс, который называется «Круг» (дочерний класс «Простой»), с 2 переменными: 1 точка, 1 радиус
Вот тот конструктор, который я пробовал:
Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v)
{
m_rayon = rayon;
vector<Point> liste;
liste.push_back(centre);
__super::Simple(v,liste);
}
Я получил сообщение о том, что Simple не имеет конструктора по умолчанию.
Я знаю, что в основном я должен сделать так:
Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v) : m_rayon(rayon), Simple(...)
Проблема в том, как построить вектор?
Это может быть глупый вопрос, я не знаю, я пришел из Java, поэтому я использовал супер и может быть плохим способом …
Используйте конструктор вектора, который делает вектор n
копии элемента:
Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v)
: m_rayon(rayon), Simple(v, std::vector<Point>(1, centre)) { /* ... */ }
Или в C ++ 11 используйте конструктор списка инициализатора:
Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v)
: m_rayon(rayon), Simple(v, {centre}) { /* ... */ }
У Vector есть полезный конструктор: vector(size_type count, const T& value, <irrelevent>)
это облегчает создание вектора с одним элементом: vector<Point>(1, centre)
,
Вот так:
Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v)
:m_rayon(rayon),
Simple(v, vector<Point>(1, centre))
{
}
Если у вас есть несколько элементов, создайте более простую вспомогательную функцию или используйте initializer_list
initializer_list
Rect::Rect( const Point topleft, const Point botright, EnumCouleur::tEnumCouleur v)
:m_rayon(rayon),
Simple(v, {topleft, botright})
{
}
вспомогательная функция:
std::vector<Point> make_from_two(point one, point two) {
vector<Point> liste;
liste.push_back(one);
liste.push_back(two);
return liste;
}
Rect::Rect( const Point topleft, const Point botright, EnumCouleur::tEnumCouleur v)
:m_rayon(rayon),
Simple(v, make_from_two(topleft, botright))
{
}