Наследование и вектор STL

скажем, у меня есть класс «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, поэтому я использовал супер и может быть плохим способом …

-3

Решение

Используйте конструктор вектора, который делает вектор 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}) { /* ... */ }
0

Другие решения

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

По вопросам рекламы [email protected]