Preguntas de POO (Programación Orientada a Objetos) - página 3

 
tara:

Añade.

Añadí ))
 
EverAlex:

Para un círculo se calcula de una manera, para un cuadrado de otra. Pero en cualquier caso - llamando a Figura.GetSquare(),

A mí, por ejemplo, me cuesta aprender la teoría, demostrar un ejemplo y describir cómo la función define un círculo, un cuadrado, un trapecio o un triángulo...
 
Y el silencio...
 
VOLDEMAR:
Y el silencio...

Bueno, era un 2x2=?

No me interesa responder.

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

Tal vez esto esté más cerca.

Existe un conjunto estándar de métodos virtuales en una clase: Open(), Close(), Read(), Write(), etc.

Esta clase puede manejar archivos, mapeo, canales, internet, etc.

Sólo el contenido (descripción) de estos métodos será diferente. Pero la interfaz de la clase será idéntica.

 

¿No te parece sospechoso que ya sea la tercera página sobre el tema y nadie haya citado un solo punto de código como ejemplo?

Además, no es interesante responder, es elemental, es tan simple que da pereza codificar...

Si alguien supiera algo, creo que habría respondido...

 

VOLDEMAR, si tomas tu primer puesto, ¿por qué hay una clase allí? Escribir clases es una consecuencia de la complejidad del programa, cuando los elementos individuales tienen muchos enlaces externos, entonces se crea una clase para unir todos estos elementos y crear una interfaz simple. En mi opinión, un atributo necesario de una clase son los datos (int's, double's ...) - material con el que trabajan las funciones, la clase conecta todo en un solo paquete (datos y funciones).Creo que esta es la idea básica de la POO. Por ejemplo, dos ejemplos, el primero sin OOP, el segundo con él:

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

En el segundo ejemplo, no tenemos que preocuparnos por los datos con los que trabajarán las funciones, creo que este es el principal propósito de la POO.

 
¿Por qué el segundo método arroja un montón de errores y advertencias?
 

Una observación más sobre su código:

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

Tengo una regla: nunca escribas un destructor vacío. La ausencia de un destructor es un indicador de la simplicidad de la clase. Si se escribe un destructor, es posible que haya que escribir un constructor de copia y el operador = o prohibirlos. Ejemplo:

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

Esto hará que se llame a delete dos veces para el mismo puntero. La forma correcta es esta

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

Por lo tanto, si tiene que escribir un destructor, es una buena razón para pensar dos veces - ¿qué hacer con la ópera = y el constructor de copia? ¿Borrarlo, escribirlo...? No creo que debas escribir destructor vacío, su ausencia es un indicador de que no necesitas rehacer lo anterior.

 
VOLDEMAR:
¿Por qué el segundo método arroja un montón de errores y advertencias?

Poner un punto después de esto en lugar de ->. mql chip.
 

Por favor, explique las acciones

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

a saber:

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

¿por qué el signo (:) y qué conseguimos con él?

Razón de la queja: