
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Atadaki void Del(C_A *p) öğesinin herhangi bir çocuğun işaretçisini silmek için yeterli olacağını varsaysak bile, kullanmak için bir neden göremiyorum.
Peki, bu başka bir soru :) - Bir uygunluk sorunu. Bu yaklaşımın doğruluğu / okuryazarlığı sorusuyla da ilgileniyorum.
Evet, işaretçi doğru şekilde kaldırılırsa tüm varyantlar iyidir.
Ve bellek sızıntısı görünmeyi bıraksa bile kaldırılmış gibi görünüyor (FIG, geçen sefer neden çıktığını biliyor) ...
Evet, işaretçi doğru şekilde kaldırılırsa tüm varyantlar iyidir.
Ve bellek sızıntısı görünmeyi bıraksa bile kaldırılmış gibi görünüyor (FIG, geçen sefer neden çıktığını biliyor) ...
Yandan havalı görünüyor - nesne kendi kendine çarpıyor.
Güzel bir şey yok - herkesi "söndürmek" ...
Bu kod biraz daha havalı (dizideki her şey çöküyor).
Ama en havalı şey, dizinin bir alt sınıfa gömülü olması...
Polimorfizm sorusu.
Belgelerde bu örneğe sahiptir:
CShape[ 10 ] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for ( int i= 0 ; i< 10 ;i++)
{
//--- тип и площадь фигуры
Print ( "Объект типа " +shapes[i].GetType()+ " имеет площадь " + shapes[i].GetArea());
};
Tam olarak ne olması gerektiğini anlamıyorum.
//... здесь заполняем массив производными объектами
En az 1 örnek verebilir misiniz?
Ve neden dizinin boyutu değişkenin kendisi tarafından değil de değişkenin türü tarafından gösteriliyor?
Ayrıca , belgelerin aynı bölümünde, sınıf bildirimlerinde hatalar var gibi görünüyor:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
Ve neden dizinin boyutu değişkenin kendisi tarafından değil de değişkenin türü tarafından gösteriliyor?
Saf yazım hatası.
Ayrıca , belgelerin aynı bölümünde, sınıf bildirimlerinde hatalar var gibi görünüyor:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
Bildirilen sınıfın adından sonra süslü parantezlerden mi bahsediyorsunuz?
Polimorfizm sorusu.
Belgelerde bu örneğe sahiptir:
CShape[ 10 ] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for ( int i= 0 ; i< 10 ;i++)
{
//--- тип и площадь фигуры
Print ( "Объект типа " +shapes[i].GetType()+ " имеет площадь " + shapes[i].GetArea());
};
Tam olarak ne olması gerektiğini anlamıyorum.
//... здесь заполняем массив производными объектами
En az 1 örnek verebilir misiniz?
Belgelerden alıntıladığınız örnekten önce şöyle bir ifade var: "Artık Shape türünde bir dizi bildirebilir ve onu türetilmiş sınıfların nesneleriyle doldurabiliriz." Bu nedenle, shape[10] dizisi, CShape'den türetilen sınıf örnekleriyle doldurulmalıdır. Doğru şekilde?
Aynı belgede iki türetilmiş sınıf örneği vardır: CCircle ve CSquare. Bu nedenle, bu iki sınıfın örneklerini oluşturmak bize kalır, örneğin:
...ve şekiller[10] dizimizin ilk iki öğesini bunlarla doldurun:
Katılıyor musun?
Belgelerden alıntıladığınız örnekten önce şöyle bir ifade var: "Artık Shape türünde bir dizi bildirebilir ve onu türetilmiş sınıfların nesneleriyle doldurabiliriz". Bu nedenle, shape[10] dizisi, CShape'den türetilen sınıf örnekleriyle doldurulmalıdır. Doğru şekilde?
Aynı belgede iki türetilmiş sınıf örneği vardır: CCircle ve CSquare. Bu nedenle, bu iki sınıfın örneklerini oluşturmak bize kalır, örneğin:
...ve şekiller[10] dizimizin ilk iki öğesini bunlarla doldurun:
Katılıyor musun?
Kabul edebilirim, ancak derleyici bir hata veriyor:
'shape' - yapının nesneleri var ve kopyalanamaz test.mq5 36 3
Kabul edebilirim, ancak derleyici bir hata veriyor:
'shape' - yapının nesneleri var ve kopyalanamaz test.mq5 36 3
Tam kodu verebilir misiniz?
Kesinlikle:
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+