наследование

 

есть базовый класс с одним конструктором

class Strategy{
    private:
        int status;
        int pipsToDepoCrash;
        int distanceBetweenAveragesInPips;
        int amountOfSkewness;
    public:
        int getStatus();
        void setStatus(int newStatus);
        void managePositions();
        void selectStrategyStatus(double pipsToCrash, double distanceBetweenLevels, double skewness);
        Strategy(int _pipsToDepoCrash, int _distanceBetweenAveragesInPips, int _amountOfSkewness);
        ~Strategy();
};
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Strategy::Strategy(int _pipsToDepoCrash, int _distanceBetweenAveragesInPips, int _amountOfSkewness){
    status = (int)GlobalVariableGet(Symbol() + "ForceMajorStrategy");
    pipsToDepoCrash = _pipsToDepoCrash;
    distanceBetweenAveragesInPips = _distanceBetweenAveragesInPips;
    amountOfSkewness = _amountOfSkewness;
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// деструктор

когда я хочу унаследоваться от этого класса

class LockPositionStrategy : public Strategy{
    private:
        OrdersStack* ordersStack;
    public:
        LockPositionStrategy();
        ~LockPositionStrategy();
};
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LockPositionStrategy::LockPositionStrategy(){ // получаю ошибку  'Strategy' - wrong parameters count
    ordersStack = OrdersStack::getInstance();
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LockPositionStrategy::~LockPositionStrategy(){
}

а если передаю параметры в конструктор наследника, тогда

class LockPositionStrategy : public Strategy{
    private:
        OrdersStack* ordersStack;
    public:
        LockPositionStrategy(int _pipsToDepoCrash, int _distanceBetweenAveragesInPips, int _amountOfSkewness);
        ~LockPositionStrategy();
};
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LockPositionStrategy::LockPositionStrategy(int _pipsToDepoCrash, int _distanceBetweenAveragesInPips, int _amountOfSkewness){ // все равно ошибка 'Strategy' - wrong parameters count
    ordersStack = OrdersStack::getInstance();
    super.(передать параметры) // так написать не могу
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LockPositionStrategy::~LockPositionStrategy(){
}

все равно получается ошибка, подскажите что не так делаю?

 
в документации не нашел примера наследования с передачей параметров в супер класс
 
dmmikl86:
в документации не нашел примера наследования с передачей параметров в супер класс

Я этого даже представить не могу, как квадратный трехчлен. Папа породил сына, который изменил папу, чтобы стать другим?
 
tara:

Я этого даже представить не могу, как квадратный трехчлен. Папа породил сына, который изменил папу, чтобы стать другим?


а как правильно будет?

ведь ошибки выдаются в обоих вариантах коструктора

 
dmmikl86:


а как правильно будет?

ведь ошибки выдаются в обоих вариантах коструктора


Да, сельдерей его знает, как правильно будет,- я ООП только по ПРИЗ представляю совсем маненько. Осенью займусь.

ЗЫ В класс параметры передавать как-то не очень, имхенько.

 

Не знаю, как в MQL, но в С++ нужен в базовом классе конструктор по умолчанию или явно вызывать конструктор базового класса, который есть, в производном классе.

Ещё есть вариант сделать все параметры конструктора базового класса по умолчанию.

Вижу, что всё плохо продумано с инициализацией базового класса.

 

Надо использовать список инициализации.

class LockPositionStrategy : public Strategy{
    private:
        OrdersStack* ordersStack;
    public:
        LockPositionStrategy(int _pipsToDepoCrash, int _distanceBetweenAveragesInPips, int _amountOfSkewness);
        ~LockPositionStrategy();
};
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LockPositionStrategy::LockPositionStrategy(int _pipsToDepoCrash, int _distanceBetweenAveragesInPips, int _amountOfSkewness)
  : Strategy(_pipsToDepoCrash, _distanceBetweenAveragesInPips, _amountOfSkewness)
{
    ordersStack = OrdersStack::getInstance();
    super.(передать параметры) // так написать не могу
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LockPositionStrategy::~LockPositionStrategy(){
}
 
TheXpert:

Надо использовать список инициализации.


спасибо. в который раз помогаете
Причина обращения: