Per un cerchio si calcola in un modo, per un quadrato in un altro. Ma in entrambi i casi - chiamando Figura.GetSquare(),
Io per esempio trovo difficile imparare la teoria, dimostrare un esempio e descrivere come la funzione definisce un cerchio, un quadrato, un trapezio o un triangolo?
VOLDEMAR, se prendi il tuo primo post, perché c'è proprio una classe? Scrivere classi è una conseguenza della complessità del programma, quando i singoli elementi hanno molti collegamenti esterni, allora si crea una classe per unire tutti questi elementi e creare una semplice interfaccia. Secondo me, un attributo necessario di una classe sono i dati (int, double...) - materiale con cui lavorano le funzioni, la classe collega tutto in un pacchetto (dati e funzioni). Per esempio, due esempi, il primo senza OOP, il secondo con esso:
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()
{
returnthis->i1 + this->i2;
}
};
void main() // главная функция программы
{
QQ q;
q.sum(56);
any_fn(q.get_number()); // какое-то действие с нашей суммой.
}
Nel secondo esempio, non dobbiamo preoccuparci dei dati con cui le funzioni lavoreranno, penso che questo sia lo scopo principale dell'OOP.
Ho una regola: mai scrivere un distruttore vuoto. L'assenza di un distruttore è un indicatore della semplicità della classe. Se viene scritto un distruttore, potreste dover scrivere un costruttore di copia e l'operatore = o vietarli. Esempio:
struct S {};
class QQ
{
S *p;
public:
QQ() {this->p = new S;}
~QQ() {deletethis->p;}
};
void main()
{
QQ q;
QQ q2 = q;
}
Questo farà sì che la cancellazione venga chiamata due volte per lo stesso puntatore. Il modo corretto è questo
class QQ
{
S *p;
public:
QQ() {this->p = new S;}
~QQ() {deletethis->p;}
QQ(QQ &); // Только объявляем, определения нигде нет.
QQ &operator=(QQ &); // Только объявляем, определения нигде нет.
};
//илиclass QQ
{
S *p;
public:
QQ() {this->p = new S;}
~QQ() {deletethis->p;}
QQ(QQ &q) {this->p = new S(*q.p);}
QQ &operator=(QQ &q) {*this->p = *q.p;}
};
Quindi, se dovete scrivere un distruttore, è una buona ragione per pensarci due volte - cosa fare con opera = e copia costruttore? Cancellarlo, scriverlo...? Non credo che dovresti scrivere destructor vuoto, la sua assenza è un indicatore che non hai bisogno di rifare quanto sopra.
Aggiungere.
Ho aggiunto ))
Per un cerchio si calcola in un modo, per un quadrato in un altro. Ma in entrambi i casi - chiamando Figura.GetSquare(),
E il silenzio...
Beh, era un 2x2=?
Non è interessato a rispondere.
=================
Forse questo è più vicino.
C'è un insieme standard di metodi virtuali in una classe: Open(), Close(), Read(), Write() ecc.
Tale classe può gestire file, mappatura, canali, internet, ecc.
Solo il contenuto (descrizione) di questi metodi sarà diverso. Ma l'interfaccia della classe sarà identica.
Non ti sembra sospetto che sia già la terza pagina sull'argomento e nessuno ha citato un solo punto di codice come esempio?
Inoltre, non è interessante rispondere, è elementare, è così semplice che è troppo pigro per codificare...
Se qualcuno sapesse qualcosa, penso che avrebbe risposto...
VOLDEMAR, se prendi il tuo primo post, perché c'è proprio una classe? Scrivere classi è una conseguenza della complessità del programma, quando i singoli elementi hanno molti collegamenti esterni, allora si crea una classe per unire tutti questi elementi e creare una semplice interfaccia. Secondo me, un attributo necessario di una classe sono i dati (int, double...) - materiale con cui lavorano le funzioni, la classe collega tutto in un pacchetto (dati e funzioni). Per esempio, due esempi, il primo senza OOP, il secondo con esso:
Nel secondo esempio, non dobbiamo preoccuparci dei dati con cui le funzioni lavoreranno, penso che questo sia lo scopo principale dell'OOP.
Un altro commento sul tuo codice:
... class vr_trade { ... ~vr_trade(){} }; ...Ho una regola: mai scrivere un distruttore vuoto. L'assenza di un distruttore è un indicatore della semplicità della classe. Se viene scritto un distruttore, potreste dover scrivere un costruttore di copia e l'operatore = o vietarli. Esempio:
Questo farà sì che la cancellazione venga chiamata due volte per lo stesso puntatore. Il modo corretto è questo
Quindi, se dovete scrivere un distruttore, è una buona ragione per pensarci due volte - cosa fare con opera = e copia costruttore? Cancellarlo, scriverlo...? Non credo che dovresti scrivere destructor vuoto, la sua assenza è un indicatore che non hai bisogno di rifare quanto sopra.
Perché il secondo metodo lancia un mucchio di errori e avvertimenti?
Mettete un punto dopo questo invece di ->. mql chip.
Si prega di spiegare le azioni
cioè
perché il segno (:) e cosa otteniamo con esso?