Puntatori a oggetti




с++, puntatori a oggetti, La programmazione per i principianti, c++C ++Quando ci siamo conosciuti con puntatori in C ++ (vedere. I puntatori in C ++. parte 1 ) vi può essere una rappresentazione semplificata, che i puntatori possono puntare solo a variabili individuali incorporati (skalyarnıx) C ++ tipo, e che questo è solo un altro, una forma alternativa di accesso a tali variabili. In tali un'applicazione puntatori sarebbe il benvenuto lingua aggiunta, ma con una capacità molto limitata.

Un esame più attento di C ++ puntatori, troviamo, il puntatore può essere l'indirizzo di alloggio (punto di) qualsiasi programma oggetto ammissibile: struttura, oggetto di classe, schieramento, funzioni, o ancora, un puntatore a un oggetto, o un puntatore a un puntatore, e così via… Questo rende il puntatore quasi il più potente strumento nel programmatore C ++ ... ma anche il più pericoloso in termini di possibili errori nascosti.

Considerate queste opzioni più. L'opzione più semplice è quella di utilizzare puntatori a oggetti complessi (gli oggetti e le strutture di classe). Ma tale utilizzo di puntatori apre ampie prospettive in C ++, come vedremo.

così, sappiamo già, che la definizione di classe non crea nuovi oggetti di database nel programma - è solo una descrizione di un modello, nuovo tipo di dati, secondo il quale creerà reale oggetti dati. Quando si creano (pubblicità) Nuovi oggetti di dati, siamo in grado di calcolare l'indirizzo di questi oggetti e assegnarli a puntatori a oggetti questa classe. Scrivere un programma semplice, operiruyushtuyu con puntatori a oggetti qualche classe (ex1.cc файл):

Qui vediamo una relativamente nuovi argomenti nostro design:

questo progettista nuova classe mio, ma con un parametro creazione. Quando si chiama si chiama il costruttore della superclasse (numero(intorpidire)), dandogli lo stesso valore. I seguenti parentesi {} cornice nullo codice di blocco, i quali mezzi, che niente di più deve essere fatto al di là della chiamata il costruttore genitore. ricordando, che l'intera sequenza dei costruttori di tutte le classi padre – chiamata (in ordine inverso di successione) Quando si chiama generato dal costruttore della classe, ma è solo per i progettisti senza parametri. Nel caso di costruttori con parametri rodieley si dovrà chiamare il apparentemente.

Ma noi divagando dal soggetto della nostra discussione… Ed ora è il momento di compilare e vedere l'esecuzione del programma che abbiamo ricevuto:

с++, puntatori a oggetti, La programmazione per i principianti, c++C ++

Nulla di fondamentalmente nuovo, e tutto questo è molto simile al, vorremmo lavorare con i puntatori alle variabili di tipo raddoppiare, diciamo.

richiamo, in aggiunta, che оператор nuova per creare dinamicamente un nuovo oggetto:

e) Essa fa sì che il gestore di controllo della memoria dinamica e assegna un nuovo volume per il posizionamento dell'oggetto;

B) cause progettista corrispondente classe (tipo di dati) per la marcatura iniziale (inizializzazione) memoria dedicata. Modificare leggermente il vostro esempio (ex2.cc файл):

Costruzione e la gestione:

с++, puntatori a oggetti, La programmazione per i principianti, c++C ++

E 'ancora non ci sono stati cambiamenti radicali ..., ma prestare attenzione alla, che il programma (e potrebbe essere arbitrariamente grande programma) dichiarata e non non utilizzati in modo esplicito oggetti - Il programma funziona solo puntatori a oggetti.

e, infine, ci si avvicina alle tecniche nell'uso di puntatori a oggetti, che lo rende più potenti indicatori di strumento di lavoro con classi e gli oggetti in C ++. cioè: le funzioni di membro di virtualizzazione e di classe polimorfismo. concetto di polimorfismo (variabilità della forma, la diversità) – uno dei principali C ++ sviluppo sul suo predecessore, il C. è, che il capostipite di una intera famiglia classi ereditate annuncia alcune delle sue funzioni, metodi come virtuale. A diverse classi ereditate questi metodi caratteristiche ridefinito diversamente. Questo significa, che le diverse classi derivate (collegato) metodo della funzione con lo stesso nome verrà eseguita modo un po 'diverso, a seconda della classe a cui è usato.

Per illustrare questa tecnica sull'esempio. creare (ex3.cc файл) classe, descrivendo in generale alcun dato sul piano piatta (può essere elementi di uno scenario di gioco 2D):

Qui abbiamo un esempio di, in C ++ chiamato astratto classe: classe, che definisce almeno una virtuale funzione con la definizione della forma:

Nelle caratteristiche di classe illustrate quali molto 3. naturalmente, che creano oggetto classe astratta impossibile, ci sono funzioni, che il corpo non è definita. Cercando di dichiarare oggetti di questa classe causerà un errore di sintassi. Ma da un tale classe, è possibile ereditare, creare classi derivate, che erediteranno le proprietà generali di un'astratta generica (per esempio, coordinate X e e il centro della figura e la sua dimensione R).

definire 3 derivati da figura classe: tondo, quadrato e un triangolo equilatero:

Ora siamo pronti a creare un programma, per cui sono state costruite tutte queste preparazioni: creare un numero qualsiasi diverso 2D geometrico oggetti, su cui può eseguire uniforme (virtuale) azioni, indipendentemente dalla loro diverse nature:

In questo esempio molto semplice illustra il, in modello a oggetti C ++ linguaggio chiamato I polimorfismi. E questa proprietà è uno dei più potenti strumenti di espressione di C ++. E questa tecnica è sempre realizzata attraverso puntatori a oggetti (figura*).

Ecco come apparirà la compilazione e l'attuazione del nostro esempio (ex3.cc) al terminale del sistema operativo Linux quando si utilizza il compilatore GCC con il linguaggio C ++ (esso sarà ancora una volta conferma, che la programmazione in C ++ in meno dipendenti dal sistema operativo):

с++, puntatori a oggetti, La programmazione per i principianti, c++C ++

Facendo nuovamente riferimento al codice mostrato nell'esempio, e ancora una volta fissare il fatto estremamente importante, che i puntatori C ++ sempre tipizzato: Indice non può essere "un puntatore a qualcosa". Il linguaggio C ++ – una lingua con Nome forte tipizacieй. Digitare il puntatore è: un puntatore per indicare il tipo di esso variabile, come ad esempio "puntatore a doppio». Puntatori a diverse tipologie sono reciprocamente incompatibili e confrontati per destinazione.

funzioni virtuali e polimorfismo tecnologiche sono così centrale per l'intera filosofia di C ++, che richiedono un esame dettagliato separato. A proposito di questo discorso in una delle seguenti lezioni.

Per sostenere il nostro sito – cliccare sul salvadanaio e scegliere qualsiasi modo conveniente.

Newsletter nuove lezioni sulla programmazione:

Puntatori a oggetti
5 (100%) 1 votazione

olio

Di olio

esperienze pratiche circa lo sviluppo del software 40 anni. Maestro globale Logic società di software internazionale. IBM Developer funziona autore permanente di pubblicazioni. redattore scientifico del computer casa editrice letteratura "Simbolo-Plus", San Pietroburgo.

7 pensieri su "Puntatori a oggetti

  1. per argomento – il puntatore indica l'inizio dell'area di memoria (memorizza l'indirizzo). E non c'è più nulla da scrivere su di esso, tk. utilizzando il puntatore si prende il valore a quell'indirizzo, e lo portano al tipo desiderato (qualsiasi).
    Se rivelare argomento – IMHO è necessario scrivere su di esso, quali problemi risolti puntatori (senza toccare l'OLP, tk. allora questo tema non è quasi divulgate) e scrivere sulla base dei puntatori vs link (Argomento è stato divulgato a Myers, si può prendere base).

    Ma ti piace quello che spostato drasticamente il polimorfismo. Non è male, ma per gli utenti, che ha letto solo il tuo sito è ora poco che è chiaro. Prima di questo,, che descrive le classi non hai scritto sulle funzioni virtuali, e anche circa l'eredità. E poi improvvisamente è caduto al lettore tutto questo e classi astratte.

    Alla fine di questo articolo si descrive il polimorfismo – Credo che valga la pena di un articolo separato. Ma prima di questo, di scrivere un articolo su “classi ereditarietà in C ++” (Questo ultimo tema nel piano sulla pagina principale)

  2. dire, e chi è admin? Lily o Igor? Ho sempre pensato, che il nome dell'amministratore scrive Igor.

  3. la, significare che la linea? Nel primo elenco

    1. L'oggetto di classe (tipo) mio – M1.
      Un puntatore all'oggetto – PM1.
      m1.show() – chiamata di metodo (funzioni) mostrare() la mia classe per l'oggetto m1.
      pm1->mostrare() – chiamata esattamente lo stesso Metodo di spettacolo() la mia classe attraverso pointer oggetto m1.

      1. In realtà, m1 – è un oggetto, e PM1 – un puntatore a un oggetto completamente differente della stessa classe (Heap).

Lascia un Commento

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *