Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Даже если предположить что void Del(C_A *p) в предке будет достаточно для удаления указателя любого потомка то не вижу смысла использовать
Ну это уже другой вопрос :) - Вопрос целесообразности. Меня же интересует вопрос правильности/грамотности такого подхода.
Да вроде все варианты хороши, если корректно удаляется указатель.
А он вроде удаляется, лаже утечка памяти перестала появляться (фиг его знает почему в прошлый раз вылезла)...
Да вроде все варианты хороши, если корректно удаляется указатель.
А он вроде удаляется, лаже утечка памяти перестала появляться (фиг его знает почему в прошлый раз вылезла)...
Со стороны прикольно выглядит - объект грохает сам себя.
Ничего прикольного - уходя "гасите" всех...
Вот такой код немного прикольней (грохается все что в массиве).
Но самое прикольное если массив встроить в класс-потомок...
Вопрос по полиморфизму.
В документации есть такой пример:
CShape[10] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for (int i=0; i<10;i++)
{
//--- тип и площадь фигуры
Print("Объект типа "+shapes[i].GetType()+" имеет площадь "+ shapes[i].GetArea());
};
Не совсем понял что должно быть на месте
//... здесь заполняем массив производными объектами
Можно хотя бы 1 пример?
И почему размерность массива указывается у типа переменной а не у самой переменной?
Кроме того в этой же главе документации кажется есть ошибки в объявлении классов:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
И почему размерность массива указывается у типа переменной а не у самой переменной?
Опечатка в чистом виде.
Кроме того в этой же главе документации кажется есть ошибки в объявлении классов:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
Вы про фигурные скобки после имени объявляемого класса?
Вопрос по полиморфизму.
В документации есть такой пример:
CShape[10] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for (int i=0; i<10;i++)
{
//--- тип и площадь фигуры
Print("Объект типа "+shapes[i].GetType()+" имеет площадь "+ shapes[i].GetArea());
};
Не совсем понял что должно быть на месте
//... здесь заполняем массив производными объектами
Можно хотя бы 1 пример?
Перед приведённым Вами примером из документации есть такая фраза: "Теперь мы можем объявить массив типа Shape и заполнить его объектами производных классов". Поэтому массив shapes[10] следует заполнить экземплярами классов, производных от CShape. Правильно?
В той же документации есть два примера производных классов: CCircle и CSquare. Поэтому нам остаётся создать экземпляры этих двух классов, например:
... и заполнить ими первые два элемента нашего массива shapes[10] :
Согласны?
Перед приведённым Вами примером из документации есть такая фраза: "Теперь мы можем объявить массив типа Shape и заполнить его объектами производных классов". Поэтому массив shapes[10] следует заполнить экземплярами классов, производных от CShape. Правильно?
В той же документации есть два примера производных классов: CCircle и CSquare. Поэтому нам остаётся создать экземпляры этих двух классов, например:
... и заполнить ими первые два элемента нашего массива shapes[10] :
Согласны?
Я то может быть и согласен, но компилятор выдает ошибку:
'shape' - structure have objects and cannot be copied test.mq5 36 3
Я то может быть и согласен, но компилятор выдает ошибку:
'shape' - structure have objects and cannot be copied test.mq5 36 3
А полный код привести можете?
Конечно:
//+------------------------------------------------------------------+
//| test.mq5 |
//| Ya |
//| Ya |
//+------------------------------------------------------------------+
#property copyright "Ya"
#property link "Ya"
#property version "1.00"
#property indicator_chart_window
//--- Базовый класс
class CShape
{
protected:
int m_type; // тип фигуры
int m_xpos; // X - координата точки привязки
int m_ypos; // Y - координата точки привязки
public:
void CShape(){m_type=0;}; // конструктор, тип равен нулю
int GetType(){return(m_type);};// возвращает тип фигуры
virtual
double GetArea(){return (0); }// возвращает площадь фигуры
};
//--- производный класс Круг
class CCircle: public CShape // после двоеточия указывается базовый класс,
{ // от которого производится наследование
private:
double m_radius; // радиус круга
public:
void CCircle(){m_type=1; m_radius=10;}; // конструктор, тип равен 1
void SetRadius(double r){m_radius=r;};
double GetArea(){return (3.14*m_radius*m_radius);}// площадь круга
};
//--- производный класс Квадрат
class CSquare: public CShape // после двоеточия указывается базовый класс,
{ // от которого производится наследование
private:
double m_square_side; // сторона квадрата
public:
void CSquare(){m_type=2;}; // конструктор, тип равен 2
void SetSide(double s){m_square_side=s;};
virtual double GetArea(){return (m_square_side*m_square_side);}//площадь квадрата
};
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
CShape shape[10]; // массив объектов CShape
//... здесь заполняем массив производными объектами
CCircle circle;
shape[1]=circle;
Print("Объект типа "+shape[1].GetType()+" имеет площадь "+ shape[1].GetArea());
//---
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+