Questions sur la POO (programmation orientée objet) - page 3

 
tara:

Ajouter.

J'ai ajouté:)
 
EverAlex:

Pour un cercle, il est calculé d'une certaine manière, pour un carré d'une autre. Mais dans les deux cas - en appelant Figura.GetSquare(),

Je trouve par exemple difficile d'apprendre la théorie, de démontrer un exemple et de décrire comment la fonction définit un cercle, un carré, un trapèze ou un triangle ?
 
Et le silence...
 
VOLDEMAR:
Et le silence...

Eh bien, c'était un 2x2= ?

Je n'ai pas envie de répondre.

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

Peut-être que c'est plus proche.

Il existe un ensemble standard de méthodes virtuelles dans une classe : Open(), Close(), Read(), Write(), etc.

Une telle classe peut gérer les fichiers, la cartographie, les canaux, l'internet, etc.

Seul le contenu (description) de ces méthodes diffère. Mais l'interface de la classe sera identique.

 

Ne trouvez-vous pas suspect qu'il s'agisse déjà de la troisième page sur le sujet et que personne n'ait cité un seul point de code comme exemple ?

En plus, ce n'est pas intéressant de répondre, c'est élémentaire, c'est tellement simple qu'on a la flemme de coder...

Si quelqu'un savait quelque chose, je pense qu'il aurait répondu...

 

VOLDEMAR, si vous prenez votre premier message, pourquoi y a-t-il une classe ? L'écriture de classes est une conséquence de la complexité du programme, lorsque les éléments individuels ont de nombreux liens externes, alors une classe est créée pour unir tous ces éléments et créer une interface simple. À mon avis, un attribut nécessaire d'une classe est les données (int's, double's ...) - matériel avec lequel les fonctions travaillent, la classe relie tous dans un paquet (données et fonctions).Je pense que c'est l'idée de base de OOP. Par exemple, deux exemples, le premier sans POO, le second avec :

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());   // какое-то действие с нашей суммой.
}

Dans le second exemple, nous n'avons pas à nous soucier des données avec lesquelles les fonctions vont travailler, je pense que c'est le but principal de la POO.

 
Pourquoi la deuxième méthode génère-t-elle une série d'erreurs et d'avertissements ?
 

Un autre commentaire sur votre code :

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

J'ai une règle : ne jamais écrire un destructeur vide. L'absence de destructeur est un indicateur de la simplicité de la classe. Si un destructeur est écrit, vous devrez peut-être écrire un constructeur de copie et l'opérateur = ou les interdire. Exemple :

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

Ainsi, delete sera appelé deux fois pour le même pointeur. La méthode correcte est la suivante

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;}
};

Ainsi, si vous devez écrire un destructeur, c'est une bonne raison de réfléchir à deux fois - que faire avec le constructeur opéra = et copy ? L'effacer, l'écrire... ? Je ne pense pas que vous devriez écrire destructeur vide, son absence est un indicateur que vous n'avez pas besoin de refaire ce qui précède.

 
VOLDEMAR:
Pourquoi la deuxième méthode génère-t-elle un grand nombre d'erreurs et d'avertissements ?

Mettez un point après ceci au lieu de ->. mql chip.
 

Veuillez expliquer les actions

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;  // деление
  };

à savoir

                     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) { }

pourquoi le signe ( :) et qu'est-ce qu'on obtient avec ?

Raison: