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, которые унаследуют общие свойства родового абстрактного (per esempio, координаты X e y центра фигуры и её размер R).

Определим 3 производных da figure classe: круг, квадрат и равносторонний треугольник:

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 (виртуальные) действия, не взирая на их различную природу:

На этом простейшем примере показано то, in объектной модели языка C++ называется полиморфизм. И это свойство является одним из самых мощных выразительных инструментов языка C++. И реализуется эта техника всегда через puntatori a oggetti (figure*).

Вот как будет выглядеть компиляция и выполнение нашего примера (ex3.cc) al terminale del sistema operativo Linux quando si utilizza il compilatore GCC con il linguaggio C ++ (esso sarà ancora una volta conferma, что программирование на языке C++ в меньшей мере зависит от операционной системы):

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

Ещё раз обратимся к коду показанного примера, и лишний раз зафиксируем то чрезвычайно важное обстоятельство, что указатели C++ всегда типизированы: указатель не может быть «указателем на что-то». Язык C++это язык со строгой именной типизацией. Типом же указателя является: указатель на тип указываемой ним переменной, например «указатель на double». Указатели на различные типы несовместимы между собой по присвоению и сравнению.

Техника виртуальных функций и полиморфизма являются настолько основными для всей философии C++, что требуют отдельного подробного рассмотрения. Об это поговорим в одном из следующих уроков.

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

Newsletter nuove lezioni sulla programmazione:


Accetto di ricevere messaggi da purecodecpp.com sulla mia e-mail

data
pagina
Указатели на объекты в C++
valutazione
5
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. По темеуказатель указывает на начало области памяти (хранит адрес). И нечего дальше писать про это, tk. при использовании указателя ты просто берешь значение по этому адресу и приводишь его к нужному типу (любому).
    Если и раскрывать темуто надо ИМХО написать про то, какие проблемы решали указатели (не касаясь ООП, tk. тут эта тема почти не раскрывалась) и написать по мотивам указатели vs ссылки (тема уже раскрыта у Маерса, можно взять там основу).

    Но ты как то резко ты перешла к полиморфизму. Это не плохо, но юзерам, которые читали только твой сайт теперь мало что понятно. До этого, 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 – я думаю это стоит выделить в отдельную статью. Но перед этим написать статью про “classi ereditarietà in C ++” (это последняя тема в твоем плане на главной странице)

    1. Автор статьине админ сайта )) Простим ему это, так как он не перечитывал все наши статьи

  2. dire, а кто админ? Лилия или Игорь? Я всегда думал, что от имени админа пишет Игорь.

  3. А, что означают строки? В первом листинге

    1. Объект класса (tipo) mio – m1.
      Указатель на этот объектpm1.
      m1.show() – вызов метода (funzioni) show() класса my для объекта m1.
      pm1->show() – вызов точно того же метода show() класса my через pointer на объект m1.

      1. Вообще-то m1это один объект, а pm1это указатель на совсем другой объект того же класса (в динамической памяти).

Lascia un Commento

Inserire il codice nei tag: <pre class="lang:C ++ decodifica:true ">IL TUO CODICE</pre>