OOP (Nesneye Yönelik Programlama) hakkında sorular - sayfa 3

 
tara :

Ekle.

ekledim ))
 
EverAlex :

Bir daire için bir şekilde, bir kare için - başka bir şekilde hesaplanır. Ama yine de - Figura.GetSquare() öğesini çağırarak ,

Örneğin, teori çalışmak, bir örnek göstermek ve fonksiyonun bir daire, kare, yamuk veya üçgeni nasıl belirleyeceğini açıklamak benim için zor ???
 
Ve sessizlik...
 
VOLDEMAR :
Ve sessizlik...

2x2=? gibi bir soruydu.

Cevap vermekle ilgilenmiyor.

=================

Belki bu daha yakındır.

Bir sınıfta standart bir sanal yöntem seti vardır: Open(), Close(), Read(), Write(), vb.

Bu sınıf dosyalar, eşlemeler, kanallar, internet vb. ile çalışabilir.

Bu yöntemlerin sadece doldurulması (açıklaması) farklılık gösterecektir. Ancak sınıf arayüzü aynı olacaktır.

 

Konuyla ilgili 3. sayfa olması ve kimsenin örnek olarak tek satır kod vermemiş olması size şüpheli gelmiyor mu ???

Ayrıca, cevap vermesi ilginç değil, basit, o kadar basit ki kodlamaya çok tembelim...

Birisi bir şey bilseydi, cevap verirdi diye düşünüyorum...

 

VOLDEMAR , eğer ilk gönderisini alıyorsan, neden sınıf var ki? Sınıf yazma, programın karmaşıklığının bir sonucudur, bireysel öğeler birçok dış bağlantıya sahip olduğunda, tüm bu öğeleri birleştiren ve basit bir arayüz oluşturan bir sınıf oluşturulur. Bence, bir sınıfın gerekli bir özelliği datadır (ints, doubles ...) - fonksiyonların çalıştığı materyal, sınıf her şeyi tek bir pakette (veri ve fonksiyonlar) birleştirir. OOP. Örneğin, iki örnek, ilki oop olmadan, ikincisi onunla birlikte:

 void sum(int &i1, int &i2, int val)
{
    i1 += val;
    i2 += val;
}
int get_number(int &i1, int &i2)
{
     return i1 + i2;
}
void main()   // главная функция программы
{
    int i1, i2;
    sum(i1, i2, 56 );
    any_fn(get_number(i1, i2));   // какое-то действие с нашей суммой.
}
 class QQ
{
     int i1;
     int i2;
public :
     void sum( int val)
    {
         this ->i1 += val;
         this ->i2 += val;
    }
     int get_number()
    {
         return this ->i1 + this ->i2;
    }
};

void main()   // главная функция программы
{
    QQ q;
    q.sum( 56 );
    any_fn(q.get_number());   // какое-то действие с нашей суммой.
}

İkinci örnekte, fonksiyonların çalışacağı veriler hakkında endişelenmemize gerek yok, bence OOP'nin ana hedefi bu.

 
İkinci yöntem neden bir sürü hata ve uyarı veriyor???
 

Oh, ve kodunuzla ilgili bir şey daha:

...
class vr_trade
  {
   ...
                    ~vr_trade(){}
  };
...

Bir kuralım var: asla bir yıkıcıyı boş yazmayın. Bir yıkıcının olmaması, sınıf basitliğinin bir göstergesidir. Bir yıkıcı yazılırsa, bir kopya yapıcı ve = operatörü yazmanız veya bunları yasaklamanız gerekebilir. Misal:

 struct S {};
class QQ
{
    S *p;
public :
    QQ() { this ->p = new S;}
    ~QQ() { delete this ->p;}
};
void main()
{
    QQ q;
    QQ q2 = q;
}

Sonuç olarak, aynı işaretçi için iki kez silme çağrılır. bu şekilde doğru olur

 class QQ
{
    S *p;
public :
    QQ() { this ->p = new S;}
    ~QQ() { delete this ->p;}
    QQ(QQ &);             // Только объявляем, определения нигде нет.
    QQ & operator =(QQ &); // Только объявляем, определения нигде нет.
};

//или
class QQ
{
    S *p;
public :
    QQ() { this ->p = new S;}
    ~QQ() { delete this ->p;}
    QQ(QQ &q)               { this ->p = new S(*q.p);}
    QQ & operator =(QQ &q)    {*this->p = *q.p;}
};

Onlar. Eğer bir yıkıcı yazmak zorunda olsaydınız, o zaman bu dikkatlice düşünmek için bir fırsattır - opera.= ve bir kopya yapıcı ile ne yapmalı? Sil, yaz...? Bence boş bir yıkıcı yazmaya değmez, yokluğu yukarıdakileri tekrarlamanın yararsızlığının bir göstergesidir.

 
VOLDEMAR :
İkinci yöntem neden bir sürü hata ve uyarı veriyor???

-> yerine bundan sonra bir nokta koyun. mql çipi.
 

Lütfen adımları açıklayın

 struct complex
  {
   double             re; // действительная часть
   double             im; // мнимая часть
   //--- конструкторы
                     complex():re( 0.0 ),im( 0.0 ) {  }
                     complex( const double r):re(r),im( 0.0 ) {  }
                     complex( const double r, const double i):re(r),im(i) {  }
                     complex( const complex &o):re(o.re),im(o.im) { }
   //--- арифметические операции
   complex           Add( const complex &l, const complex &r) const ;   // сложение
   complex           Sub( const complex &l, const complex &r) const ;   // вычитание
   complex           Mul( const complex &l, const complex &r) const ;   // умножение
   complex           Div( const complex &l, const complex &r) const ;   // деление
  };

yani

                     complex():re( 0.0 ),im( 0.0 ) {  }
                     complex( const double r):re(r),im( 0.0 ) {  }
                     complex( const double r, const double i):re(r),im(i) {  }
                     complex( const complex &o):re(o.re),im(o.im) { }

neden (:) işareti ve bu işaretle ne elde ederiz?