Сделайте что-нибудь перед вызовом супер-конструктора в c ++ - PullRequest
0 голосов
/ 22 сентября 2018

Могу ли я выполнить некоторые выражения перед вызовом базового класса в c ++?В частности, подготовьте входные данные / параметры для базового конструктора.Например:

class Figure {
    Point* vertex;
    Figure(Point vertex[MAX]) {
        this->vertex = vertex;
    }
};

class Triangle: public Figure {
    Triangle(Point p1, Point p2, Point p3) {
      //here it is my question, it is possible?
      Point pts[3] = {p1,p2,p3}; //preparing input for constructor
      Figure(pts); or Figure::Figure(pts); // calling the constructor 
    }
}; 

Я не уверен, является ли этот вопрос специфичным для C ++, возможно, это общий вопрос.Спасибо!

1 Ответ

0 голосов
/ 23 сентября 2018

Вы можете сделать что-то с делегирующим конструктором и инициализацией списка , например, если вы хотите немного изменить свои интерфейсы и используете c ++ 11 или новее.

#include <vector>

using Point = int;

class Figure
{
    public:
        Figure(const std::vector<Point>& points) : vertices(points) {}

    private:
        std::vector<Point> vertices;
};

class Triangle : public Figure
{
    public:
        Triangle(const Point& p1, const Point& p2, const Point& p3) : Figure({p1, p2, p3}) {}
};

int main(int argc, char** argv)
{
    Point p1 = 1;
    Point p2 = 2;
    Point p3 = 3;

    Triangle t(p1, p2, p3);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...