archivi categoria: funzioni, ricorsione, La portata delle variabili

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

La portata delle variabili (parte 2)




C ++, variabili locali e globali, l'ambito delle variabili, C ++ principianti, namespaceHanno descritto il primo articolo sul tema Le variabili locali e globali. La portata in C ++. Хотелось бы ещё немного дополнить её. А именно примером с пространствами имен. Ho scritto un prefisso non è vana std:: prima della dichiarazione di uscita cout. e endl. E 'anche uno dell'ambito formazioni – namespace. Se non entrare nei dettagli specifici, namespace, è un certo gruppo di operatori / funzione / variabili / tipi, uniti in questa Normativa “frazione” detto std.

std namespace del file di intestazione (intestazione nel nostro) iostream. cout, gin, endl et al. – tutto “dinastia” std. Se non si collega nel codice e scrivere std:: prima di questi operatori, C ++ lo dirà “addio di lasciare”. Perché lui non lo sa, che cosa è questo cout quindi, senza “cognome”. Tra l'altro in C ++ e coniato l'operatore using namespace, который позволяет не писать имя пространства в качестве префикса к каждому входящему в него оператору . Questo viene fatto per convenienza, ma è necessario fare attenzione che l'operatore, se vi è una funzione dello stesso nome utilizzato nel programma di diversi namespace.

namespace bene lì, dove è necessario raggruppare qualcosa nella regione di visibilità per nome. Ad esempio nel programma due funzioni diverse possono essere descritti da somma(). Un restituisce un intero, secondo reale. Se l'attività non può essere descritto come stracarico, può essere avvitato nel loro namespace:

Lo spazio dei nomi definisce un ambito qui per le varie funzioni con lo stesso nome. Fuori il namespace di queste funzioni non esiste.

C ++, variabili locali e globali, l'ambito delle variabili, C ++ principianti, namespace

In generale, un namespace può diventare un punto di contesa relativa alla portata della teoria. In realtà è solo un gruppo denominato, ma ha lo stesso effetto, nonché un blocco di istruzioni {…}. Хочешь обратиться к операторам из этого пространства – essere gentile girare prima allo spazio nome: numero intero :: somma() Тут двоеточие :: – l'estensione del campo di applicazione operatore.

Forse l'ultima, possiamo dire – il campo di applicazione è molto rivelatrice nel PLO (Object Oriented Programming). quando classe programmatore descrive privato proprietà (Metodo variabile o funzione), chiede il suo campo di applicazione. Ad esempio, nel codice tipo:

proprietà K e kc Hanno diversi ambiti. Il primo è disponibile solo nei metodi di classe. Perché non è possibile accedere al programma principale, è privata (privato ). Chiusa a tutti, tranne nella regione di visibilità della classe.

Il secondo pubblico (pubblico). Её область видимости выходит за пределы класса. Dal programma, che sarà chiamato un oggetto di questa classe è disponibile.

C ++, variabili locali e globali, l'ambito delle variabili, C ++ principianti, namespace

kc Si è dichiarata come una variabile pubblica, sua portata, a differenza del cambiamento K , più ampia. Pertanto, il compilatore non fa contro il suo uso fuori della classe.

Quello che possiamo trarre da tutto questo la conclusione? Geeks la bava alla bocca che urla su tutti i portali – “Abbasso le variabili globali!”. Geeks, come per limitare l'ambito di visibilità, l'individuazione e l'imballaggio tutto in classi o spazi dei nomi. Geeks hanno bracci. Il programmatore non deve abusare della portata, Non per ottenere, interpretazione, quando per fare riferimento a una variabile è necessario scrivere nel modo. vale a dire. qualcosa di simile il mio nome::group1::PeremenkiDlaPrepoda::io Ну жесть просто.

L'uso di variabili globali, insieme con il locale dovrebbe essere saggezza – se del caso, scrivere globale. Dove non c'è – localizzare.

Se non avete visto il video sulla portata soggetto in C ++ nella lezione precedente – appositamente per voi a mettere qui:

Newsletter nuove lezioni sulla programmazione:

Le variabili locali e globali. portata.




C ++, variabili locali e globali, l'ambito delle variabili, C ++ principiantiPer la comprensione delle variabili di localizzazione probabilmente iniziare con un'allegoria. che cosa “località”? Questa limitazione di capacità di spazio. portata variabile – questo è il pezzo di codice (funzione, ciclo, spazi dei nomi), in cui viene dichiarata la variabile (farro). Al di fuori di questa zona – il compilatore non lo vede (non è disponibile).

Così si scopre – Variabili come descritto all'interno delle funzioni, Essi non possono essere utilizzati all'estero. Come esempio, si consideri il seguente codice:

Diamo un'occhiata a un esempio di una più stretta. Così abbiamo una variabile io, descritta è una funzione del programma. Il suo campo di applicazione e le azioni – l'intero programma non è limitato a. E una volta che lei “legittimo” l'intero programma, in tutte le sue funzioni e blocchi operatori, prigionieri {}, allora si chiama una variabile globale.

Abbiamo anche visto nell'esempio della funzione somma(), che qualcosa fa. È descritto nella seconda variabile – K. Lei ha già una specifica “registrazione” – funzione. Inoltre, questa variabile non può essere utilizzato di fuori della funzione. vale a dire. se la funzione principale() finale è anche la conclusione della K lo schermo, inizia compilatore “giurare”. E 'semplicemente semplicemente non vede al di fuori della funzione somma(). Partenza:

variabile K si chiama locale, e la sua portata funzione di parentesi aperte e chiuse definito somma(){…}. Poi non ce l'hanno in esecuzione, quindi non può essere utilizzato fuori funzione. Kompiliruem:

C ++, variabili locali e globali, l'ambito delle variabili, C ++ principianti

tuttavia, si deve anche tenere conto, che il campo di applicazione è esteso alle unità interne. Ad esempio, si consideri questo codice:

Si manifesta il seguente campo di applicazione:

  • globale – i = 2 lei;
  • Locale nella funzione – variabile K;
  • relativa locale per il ciclo() – secondo io.

sebbene, che per ha il suo ambito di applicazione, se stesso per funzione membro somma(). E significa, e tutto ciò che è, Essa è soggetta alla portata locale della funzione. vale a dire. tutte le variabili, funzione definita nello stesso modo e nel corpo stesso per, che permette all'operatore di lavorare K += 1 (egli è k = k + 1 o k ++).

Più interessante è il caso di una variabile io, descritto in per. Nonostante il nome, variabile globale è identica a quella descritta sopra, questa è un'altra variabile.

Non appena il loro ciclo ha funzionato, variabile io, in essa descritto, perde il suo potere, o in altre parole – “rilasciato” dai dazi. Non è uno scherzo – solo che il gestore della memoria arriva. Quando viene descritta una variabile, riserve Gestione sotto la sua memoria, e quando il campo di applicazione si conclude – Questo libera la memoria. gestore di memoria a marchi, che questa posizione di memoria non è proprietà di nessuno, ed è possibile dare una registrazione di altri dati.

Per fissare un altro primerchik luce:

Esso descrive il blocco di istruzioni ambito, limite {}, vale a dire. prima cout visualizza 2, perché il blocco definito di istruzioni, in cui il lavoro è cout. E nello stesso blocco è definito variabile locale chiamata e, da essa egli valuterà soprattutto.

C ++, variabili locali e globali, l'ambito delle variabili, C ++ principianti

E già fuori {} operatore cout visualizza 0, perché non c'è lo stesso per lui e, che è uguale 2. Il suo scopo è lo stesso come l'altra e, che è uguale 0, blocco definito sopra e annidato.

generalmente ricordare – nella vita reale non si dovrebbe mai dare gli stessi nomi alle variabili (tranne, che viene classicamente utilizzato per contatori di ciclo. per esempio io, j, K. Se si 10 cicli nel codice e che investito, quindi per ciascuno di essi, è possibile dichiarare e definire il contatore con il nome io. Questo è normale). In altri casi, sempre dare nomi univoci alle variabili, se non si vuole, al più tardi “ricordato” programmatori, che sarà affrontato nel codice.

Offriamo inoltre di visualizzare un video tutorial sulla portata. Autore video tutorial: Markov Denis

Newsletter nuove lezioni sulla programmazione:

Funzioni built-in (inline-funzioni)




встроенные функции с++, инлайн функции, inline функции, La programmazione per i principiantiInline функции весьма занятный рудимент, доставшийся современному миру из уже далеких бандитских 90-х. Когда процветал ассемблер, Си компилировал очень компактные и маленькие программы, когда процессоры были слабенькими (по сравнению с тем, что сейчас в мобилки ставят к примеру) и время выполнения кода ценилось на вес золота. Этот тип функций вообще-то использовался не только в Си, и в то лихое время оправдывал себя.

credo che, не для кого не секрет, что древние компьютеры требовали при написании ПО для тяжелых вычислений достаточно таки серьезного подхода с позиции программиста. Выкручиваться и экономить приходилось на всём, иначе время работы программы увеличивалось в разы. Это сейчас мы гоняем гигабайтные игрушки не особо жалуясь на скорость работы. В то время это было чрезвычайно критично, и одним из способов сократить время работы, как раз являлись inline (встроенные) funzioni. Сейчас я попробую более менее доступно рассказать почему.

così, что из себя представляет обычная funzione? Возьмем например простой примервычисление факториала.

Достаточно простые вычисления факториала (5!) in per il ciclo, и возврат результата из функции. С++ расценивает эту функцию как некий блок операций, сгруппированный в отдельный блок. Блок этот после компиляции помещается в ячейки памяти единожды в коде, и тело функции (цикл в данном случае) нигде больше в скомпилированной программе не повторяется. Все красивополучается некий участок памяти, принадлежавший программе, на который процессор при необходимости перескакивает с того места, где находит вызов.

В данном операторе сия функция задействована, процессор просто выполнит команду ассемблера CALL, в которой будет передан адрес функции. vale a dire. вызов функции обойдется в один оператор (если грубо говорить). così, in-memory (точнее говоря в стеке программы) занимается место для параметров функции, если они есть, и обязательно для адреса, откуда процессор прыгнул на функцию.

Inline функция избавляет процессор прыгать в ячейку, по адресу которой начинается эта функция. Сам смысл inline si tratta di, чтобы вместо вызова функции подставить ее тело (код функции) в место, где она вызывается.

Если описать наш факториал так:

То вместо

мы получим разворот функции в набор операторов:

как будто бы сами в коде написали в этом месте.

Соответственно код типа:

превратится в

Если мерить философскиколичество кода с inline функцией увеличилось. Вместо одной строки вызова функции ее тело, подставленное вместо вызова , дало целых 6 tempo. Так же будет и в скомпилированной программеколичество операторов возрастет многократнона столько, сколько операторов в теле функции и сколько раз ее вписали в программу.

vale a dire. различие между inline функцией и обычной функциейдублирование кода тела функции везде, где она оказывается задействована. В обычной функции, её тело находится в единственном экземпляре в одном и том же месте внутри программы.

Где здесь выгода спросите вы? Экономится время процессора на прыжки с места вызова в тело функции. Если функция огромная и используется в нескольких местах, il inline получается не совсем выгодно. tuttavia, если функция (тело её) маленькое, с минимальным количеством операторов, решающих задачу, в старину было удобнее отказаться от прыжка и просто подставить их в нужное место, как будто сам программист там их описал.

Как бы там ни было, в бытовых условиях да еще и на современных компьютерах, programmi, использующие inline подстановку тела функции вместо вызова, не дают особых преимуществ. Поэтому использовать этот вид функции приходится достаточно редко. IMHO, ему место в музее славы. sebbene, чтоб быть до конца честным, такой подход дает свои плоды тем, кто программирует контроллеры, процессоры и прочие железяки. Но там свои особенности и свой подход, и в это углубляться сейчас не стоит. utilizzare встроенную функцию (inline funzione) o no – решать самому программисту. От себя могу добавить только одноне стоит делать это там, где этого не требуется по заданию.




Newsletter nuove lezioni sulla programmazione:

Ricorsione C ++





рекурсия с++, Fibonacci C ++

In C ++ qualsiasi funzione tranne principale() Può definirsi. То есть в теле функции может быть размещен вызов этой же функции. Это называется рекурсией.

Когда программа выполняет код рекурсивной функции – avrebbe impiegato senza fine, se non si fornisce la condizione di uscita della ricorsione. Questo dovrebbe essere ricordato, per evitare il loop chiamate. Pertanto, nella definizione della funzione ricorsiva deve assolutamente indicare la condizione di uscita. per esempio, можно разместить её вызов внутри блока Se.

В этой программе функция recursionGoDown() chiamerà se stesso, пока в нее передается число больше нуля. ogni volta, la funzione ottiene il numero di, da cui è sottratto nell'unità firma. Appena la condizione diventa falsa (il numero sarà inferiore a zero) – chiamate per interrompere e avviare l'uscita del ricorsione.

Se passiamo in un numero di funzione 9, вызовов будет 10. Программа как бы углубляется на 10 livelli, l'esecuzione di ricorsione. Чтобы ей выйти из рекурсии, надо пройти эти десять уровней обратно. Poiché la linea di codice

Sarà effettuata troppo 10 tempo, но значение someNumber cambierà in ordine inverso. In primo luogo, esso corrisponderà al, что передалось в функцию на 10 уровне рекурсии, poi passato al fatto che 9 livello, ecc.

рекурсия с++, Fibonacci C ++

Voglio richiamare l'attenzione su un punto importante. Ogni chiamata ricorsiva crea una nuova variabile someNumber il nuovo valore. Эти переменные будут занимать какое-то место в оперативной памяти. Если вызовов 10, in questo esempio,, e sarà memorizzato 10 con diversi valori delle variabili. Можно дописать в программу вывод на экран адресов, che memorizza questi valori e vedere questo:

Passato al numero di funzione 2: recursionGoDown(2); Уровней рекурсии будет 3.

рекурсия с++, Fibonacci C ++

Come si può vedere, ogni variabile someNumber хранится в отдельном отрезке памяти. Durante l'uscita sul retro valori ricorsione sono presi dallo stesso indirizzo in ordine inverso.

Quasi ogni compito, che può essere risolto utilizzando la ricorsione, può essere implementato usando cicli di iterazione. Вы ведь легко можете показать на экран числа от 9 a 0 e 0 a 9 l'applicazione di cicli. Помимо этого следует знать, che la ricorsione richiede più memoria e di calcolo produrrà più lento, Cem iterazione.

ma, come sostenuto da programmatori esperti e molti autori di libri, Questo non significa, che la ricorsione è inutile. Ci sono compiti, decidere quale, Utilizzando cicli di iterazione, difficile e ingombrante. Una soluzione ricorsiva sembra migliore. Для начального уровня, fino a quando si impara solo basi della programmazione in C ++, hai solo bisogno di capire, Che ricorsione è e come funziona.

Guarda altri video su ricorsione 6′ (video autore: Denis Markov).

Newsletter nuove lezioni sulla programmazione:

Modelli C ++ funzioni





funzione di modelli C ++, funzioni C ++ modelli, template C ++

il tema del piccolo è stato precedentemente considerato overloading di funzioni in C ++. Hai imparato circa l'opportunità di scrivere diverse funzioni con lo stesso nome, che svolgono gli stessi compiti. La differenza principale tra loro – firma (tipi e / o numero di parametri dei parametri). Quando il programma viene avviato, il compilatore sceglierà, quale delle funzioni sovraccaricate applica (supponendo, che passata alla funzione)

Modelli permettono anche funzioni per gestire diversi tipi di dati, trasmessi come parametri. Ma è abbastanza per scrivere una definizione comune di una funzione. Vedi come appare.

funzione di modelli C ++, funzioni C ++ modelli, template C ++

Con la definizione di un modello di funzione che abbiamo usato parole C ++ riservati: modello e typename. modello indica, tale modello sarà ora definito. E tra parentesi angolari dopo typename dato un nome condizionale del tipo di dati. qui, invece del nome T, È possibile assegnare qualsiasi (molto desiderabile corretta) nome.

Successivo è determinata la funzione stessa. Il tipo di ritorno specificare T. parametri: il numero di tipo T, il numero e il tipo di int. Questa funzione trova il numero e la percentuale del valore dei rendimenti del programma. E il numero, e la percentuale passato come parametri. Per esempio il primo parametro si passa a una funzione integer (100). Durante l'avviamento, il compilatore di notare che attualmente T esso int e sostituire le funzioni del modello, tutti questi T di int. Così, la funzione di compilazione ha la forma:

funzione di modelli C ++, funzioni C ++ modelli, template C ++

Noi non vediamo chiaramente, ma funzionerà bene. Qualunque sia il numero, non abbiamo passata a questa funzione come primo parametro, il compilatore crea un'istanza di un modello di funzione per ogni chiamata. Qui, il primo parametro può essere qualsiasi tipo di dati.

Come risultato, lo schermo vedrà il risultato di tale calcolo:funzione di modelli C ++, funzioni C ++ modelli, template C ++

Parlando della definizione di un modello di funzione, Voglio aggiungere, tra parentesi angolari dopo la parola chiave modello possibile registrare diversi nomi convenzionali per i tipi di dati. Perché si vuole? Considerate questo esempio:

È necessario scrivere una funzione, che avrà due numeri, determinare il massimo di loro e tornare nel programma. Cerchiamo di tenere a mente, tale funzione possiamo passare il numero di diversi tipi di. Chance e il caso, un numero è un numero intero, e la seconda – vero. Vedi cosa succede:

Il primo e secondo parametri sono funzione definiti, come i parametri di tipo T. Con la funzione di chiamate in linee 19-20 nessun problema, poiché i parametri di trasferimento sono dello stesso tipo di dati. I problemi sorgono nella riga 22 compilare. E questo è comprensibile. Il compilatore si confonderà. Egli non può convertire il tipo int in raddoppiare.

шаблоны функций c++, шаблоны функций с++, template c++

Per ovviare a questo problema, è necessario scrivere un altro modello.

qui typename T_1 indica il tipo di parametro, che viene trasmesso alla prima caratteristica. typename T_2 indica rispettivamente il tipo del secondo parametro. Questa versione delle funzioni di definizione del modello avvertono errore, conseguente trasmissione di diversi tipi di parametri.

funzione di modelli C ++, funzioni C ++ modelli, template C ++

È importante ricordare,se siete in parentesi angolari dare alcuni nomi per i tipi convenzionali di parametri di funzione (in questo esempio,), tutti questi tipi di nomi devono essere menzionate nella funzione di firma. In caso contrario, non evitare errori durante la compilazione. Per esempio è la definizione di un modello

funzione di modelli C ++, funzioni C ++ modelli, template C ++

Essa porta alle seguenti errori:

шаблоны функций c++, шаблоны функций с++, template c++

Il modello che abbiamo definito le tipologie condizionali T_1 e T_2, e la firma del tipo prescritto solo T_1 .

In pratica, è possibile soddisfare la definizione di un modello di funzione in modo tale, dove invece della parola chiave typename Si usa la parola classe. per esempio:

funzione di modelli C ++, funzioni C ++ modelli, template C ++

è equivalente alla definizione di, abbiamo preso in considerazione

funzione di modelli C ++, funzioni C ++ modelli, template C ++

prima, prima che lo standard C ++ 98, in modelli sempre usato la parola classe. Chi è meglio, quando c'era una parola chiave typename , meglio usarlo. Come è più chiaramente suggerisce, che i nomi T_1 e T_2 Essi rappresentano il tipo.

Per riassumere. La funzione template è progettato per creare una descrizione generalizzata della funzione. Tale funzione può prendere parametri di qualsiasi tipo. Il modello permette al compilatore di generare codice per una funzione specifica, come (o tipi) dati, che è stato sollevato da una chiamata.

Assicuratevi di guardare il video. Informazioni sui modelli con 14 minuti:

Newsletter nuove lezioni sulla programmazione:

funzioni di sovraccarico in C ++





перегрузка функций с++, funzione di sovraccarico C ++

forse, qualcuno da principianti spaventa il titolo dell'argomento “overloading di funzioni”? mi spaventa. esso – это что-то, с чем придется долго разбираться. На самом деле, перегрузку функций очень легко понять. complicato niente.

funzioni di overload – questa funzione, che hanno lo stesso nome, ma differiscono nel numero o tipi di parametri presi. o – e l'altro e.

Per iniziare a definire qual è l'essenza dell'uso di funzioni sovraccarichi. Состоит она в том, si può dare lo stesso nome caratteristica. così, они могут по-разному выполняться и возвращать значения разных типов. per esempio, функция должна принять массив чисел и вернуть в программу сумму его элементов. Но мы можем передать в функцию массив типа int o tipo raddoppiare. В таком случае можно не давать функциям разные имена. Они ведь по сути выполняют одну и ту же работу, только используют данные разных типов.

В следующей программе определены три перегруженные функции с именем sumElements(). Tutti loro calcolare la quantità di elementi di un array. Si prende un tipo array int e la dimensione. Il secondo prende un tipo array raddoppiare e la dimensione. Третья принимает два массива с типом элементов int e raddoppiare e la loro dimensione.

Le definizioni di funzioni sovraccaricate si trovano nelle righe 31 – 61. Essi creano una variabile per memorizzare la somma dei valori degli elementi dell'array. Nel ciclo for la quantità di accumulato. Далее полученное значение возвращается в программу, per effettuare una chiamata di funzione sovraccaricata.

Titolo a tutte e tre le funzioni svolte da uno e lo stesso nome – linee 17, 21, 25. Passato alla funzione quando si chiama un array di tipo int, e le sue dimensioni, il compilatore rileverà automaticamente, quale delle tre funzioni sovraccaricate è necessario utilizzare. Точно так же произойдет и во время вызова остальных функций.

перегрузка функций с++, funzione di sovraccarico C ++

Il ruolo più importante nelle funzioni sovraccaricate svolge un elenco di parametri. Его называют ещё сигнатурой функции. Per poter utilizzare devono essere sovraccaricato di funzioni di loro firma diversa. Altrimenti, il compilatore non può determinare, che tipo di funzione che si desidera utilizzare in un caso particolare,. Cioè, nella firma deve essere diverso numero di parametri, tipi, o entrambi, e la seconda.

Come non fare:

перегрузка функций с++, funzione di sovraccarico C ++

Con questo annuncio, anche in considerazione del fatto, funzione che restituisce dati con diversi tipi di, e che i nomi dei parametri sono diversi, компилятор не сможет определить какую из двух функций вызвать. Queste firme sono identici in tipo e numero di parametri. Поэтому такие функции не могут быть перегруженными.

Guarda un breve video del sovraccarico:

Newsletter nuove lezioni sulla programmazione:

parametri (argomenti) La funzione di default.




C ++ default, C ++ argomenti predefiniti Мы уже говорили о parametri di funzione in un articolo separato. In questo – мы коротко разберемся, ciò che la funzione impostazioni predefinite. Понять это несложно. Используют их в программировании в основном для удобства. Например нам надо нарисовать 5 одинаковых прямоугольников. Per fare questo, possiamo scrivere una funzione, che prende di default. Disegna, diciamo, прямоугольник 10 di 10 personaggi. И этот символ всегда '@’:

Anche se non abbiamo passato tutti i parametri alla funzione quando si chiama, vedremo cinque rettangoli identici di caratteri '@’ sul nostro schermo. Funzione usato quei valori, che sono state assegnate le impostazioni predefinite quando la sua definizione.

Ma non è tutto. Anche se abbiamo definito le impostazioni di default – c'è un comodo opportunità di cambiare i loro valori al momento della chiamata.

Diamo, è necessario disegnare un rettangolo 5 caratteri estesi. Остальные параметры (10 altezza caratteri e si carattere '@’ ) organizziamo. Тогда в функцию мы передаем только один параметр. Оставшиеся параметры функция возьмет из заданных по умолчанию.

C ++ default, C ++ argomenti predefiniti

Если же нам необходимо изменить только символ и в параметрах он указан последним, si dovrà registrare le impostazioni precedenti, anche se i loro valori sono soddisfatto.

C ++ default, C ++ argomenti predefiniti

Sullo schermo, vediamo:

C ++ default, C ++ argomenti predefiniti

Un altro punto, che riguarda la determinazione delle impostazioni predefinite nell'intestazione della funzione. Definisce essi hanno il diritto di sinistra. Например если из трех параметров необходимо задать только один по умолчанию, deve essere definito all'estrema destra.

con parametri di default ++, argomenti di default C ++, C ++

Nella foto ultima impostazione di default : carbonizzare Simb = ‘@’. Se hanno bisogno di identificare i due – allo stesso modo che saranno due estrema destra:

Se si dichiara un prototipo di funzione – надо определить параметры по умолчанию именно в прототипе. Nella definizione delle funzioni non devono avere. forse tutti. Se qualcosa non è chiaro – chiedere nei commenti.

Newsletter nuove lezioni sulla programmazione:

Le funzioni in C ++




++ Funzione con, funzione C ++

Non avendo una lunga strada da tale nostro prima lezione da questo, voi “raggiunto” studio di funzioni C ++. funzioni – È un pezzo di nome di codice, che si ripete nel programma 2 o più volte . Quando scriviamo la funzione, è necessario dare un nome per il futuro, alla sua causa nel programma (da principale() o un'altra funzione), è necessario fare riferimento ad esso con quel nome.

Abbiamo già visto in funzione lezioni precedenti. questo Funzioni per le linee (array di caratteri) strlen(), strcmp(), funzione per la generazione di numeri casuali rand(). Li abbiamo usati nei programmi e, per esempio, Siamo passati nella funzione strlen() scadenza, e lei ci restituisce il numero di caratteri in questa stringa (numero intero). Certamente non è accaduto per magia, e la funzione ha preso la nostra stringa, processa e ci riporta al valore di, viene contato. Cioè, qualcuno ha scritto per noi questo è il codice di funzione, ritiene che la lunghezza della linea, e noi con successo usiamo nei loro programmi. E questa caratteristica è grande consente di risparmiare il nostro tempo, Si riduce la quantità di codice e facilita la leggibilità.

che – Abbiamo questi meravigliosi funzioni della libreria standard, che possiamo usare nei loro programmi, ma nella maggior parte dei casi, ogni nuova assegnazione è caratteristiche uniche e standard non sempre si adattano. In C ++, il programmatore può scrivere la propria funzione in modo indipendente e di applicare con lo stesso successo, come funzioni di libreria.

Fino a un certo tempo, si può fare senza caratteristiche. Invece, per produrre la stessa sezione di codice in tutto il programma. Ma se si deve modificare il codice (aggiornare o rimuovere qualcosa da esso), Abbiamo bisogno di apportare modifiche in tutto il programma. E 'meglio imparare le funzioni argomento e attivamente applicare.

Definire la funzione in due modi:

  • a principale-funzioni;
  • dopo principale-funzioni. In questo caso è necessario principale-funzione di annunciare la sua propria funzione prototipo.

In questo articolo ed il seguente, useremo il secondo metodo, come è più comune. Il primo metodo può essere usato, Se una funzione e il suo codice è molto piccolo. Mentre scriviamo programmi semplici, questo accade spesso. Ma per i programmi più complessi, Scriveremo un paio di caratteristiche che non sarà composto da 2-3 tempo, e più. Ti faccio vedere come cercare la definizione di una funzione principale():

Utilizzando un prototipo che sarà simile a questa:

Il prototipo è posto in una fila 4, e la sua definizione è alla base del programma in linee 20 – 25. Per quanto riguarda l'attuazione del programma: primo prototipo compilatore legge. Questo lo di conoscere darà, da qualche parte dopo principale() è la definizione di questa funzione,. Successivamente, iniziare l'esecuzione della funzione principale principale(). Sarà effettuata, il compilatore non soddisfa ancora il nome della funzione ourFunctionForPrint(). Poi si troverà la definizione della funzione, che si trova dopo la principale(), per nome, nei prototipi specificati, eseguire il suo codice, e poi ritorna nuovamente per l'esecuzione del comando principale-funzioni.

Come risultato, lo schermo vedrà:

++ Funzione con, funzione C ++

Parliamo la definizione delle funzioni.

Le funzioni in C ++ non possono restituire i valori (come nell'esempio) e può restituire qualsiasi valore. Se la funzione restituisce nulla, è una funzione del tipo vuoto.

funzione Sintassi, che non restituisce un valore:

функции c++, функции в с++

Il nome della funzione deve essere somministrato a mantenere le regole per i nomi delle variabili. L'unico – è desiderabile contenere un verbo, perché la funzione esegue un'azione. Ad esempio, se si considera la media aritmetica, si può dare un nome calculateAverage, Se l'uscita è qualcosa sullo schermo – showText. Il nome dovrebbe parlare per sé, non era necessario lasciare inutili commenti nel codice.

parametri (o argomenti di funzione) – questi dati, che riceve ed elabora funzione nel corpo. Se le funzioni non devono dare nulla per l'elaborazione, parentesi vengono lasciati vuoti. Secondo le regole High Integrity C ++ standard di codifica si consiglia di non definire funzioni con grandeenumero m di parametri (maggiore 6).

Si consideri un paio di esempi di funzioni, che accettano parametri e valori di ritorno.

Ci vuole un parametro:

Nel 10 ° riga di codice ottiene la funzione di parametro – numero intero 7. con lui (questo numero) succede allora, come descritto nella definizione di – linee 16 – 22. cioè – questo numero sarà sostituito nell'intestazione ciclo per. espressione io < questionCount sarebbe equivalente a io < 7 . Come risultato, vedremo sullo schermo 7 punti interrogativi.

++ Funzione con, funzione C ++

Ci vogliono tre parametri:

funzione C ++, ++ Funzione con

funzione Sintassi, che restituisce un valore:

функции в с++, функции c++

Queste funzioni differiscono, è necessario specificare il tipo di valore, che restituisce una funzione come risultato del loro lavoro. Sam valori restituiti in un programma predisposto dall'operatore ritorno e che il valore del programma riceverà punto, dove la funzione è stata chiamata . ritorno può restituire una variabile, costante o risultato dell'espressione (per esempio: ritorno variabile1 - variabile2; ). Il corpo della funzione può essere più operatori ritorno. poi, funzione lavoro è completo, se il lavoro di alcuni di questi operatori. per esempio:

La definizione di funzione si trova nelle righe 28 – 34. Se l'utente immette +, flusso di lavoro Se in linea 30, e di conseguenza funzionerà ritorno d1 + d2; . Da allora in poi, il codice funzione non verrà elaborata ulteriormente. Il compilatore tornerà effettuare principale-funzioni.

funzione C ++, ++ Funzione con

Avrete notato, che nel codice precedente, i nomi dei parametri nel prototipo e la definizione di funzione differiscono dai nomi delle variabili, vengono passati alla funzione di principale. Il punto seguente – parametri che definiscono il prototipo di funzione e formale. Quando passiamo le variabili come parametri, funzione non funzionerà con la variabile originale, e le loro repliche. Queste copie vengono creati nella memoria principale al momento della chiamata una funzione. Lavora con queste controparti, e al termine dei lavori, le copie vengono distrutte. Così il prototipo, è possibile utilizzare le esatte nomi delle variabili, ma in ogni caso, la funzione non funzionerà direttamente con loro, e con i loro omologhi. Cioè, le variabili non cambiano, può. Quando si diventa familiarità con le seguenti lezioni puntatori e collegamento – imparare, come è possibile modificare i valori delle variabili passate nel corpo della funzione.

Un po 'di più il prototipo: leggerla prima principale, compilatore riceve informazioni su, Che tipo di valore di ritorno è una funzione (o lei non restituisce un valore – è di tipo vuoto) e che, quali parametri vengono trasferiti in esso, quanto e in quale sequenza.

prototipo int calculateSomeDigits(int d1, int d2, carbonizzare ch); Egli dice al compilatore, che la funzione tornerà al posto del suo intero e chiamare su, una chiamata che deve essere passato due numeri interi e un simbolo. Quando si chiama una funzione, dobbiamo darle il maggior numero di parametri, come indicato nel titolo per determinare. Transmit parametri devono essere nello stesso ordine, come definito nelle parentesi del nome della funzione. In caso contrario, si verificheranno errori durante la compilazione di un programma non funzionerà correttamente.

prototipo di funzione Sintassi:

prototipo di funzione in C ++

Se diversi parametri – essi devono essere separati da una virgola. Il modo più semplice per dichiarare il prototipo – Questa copia dalla definizione della prima riga (testata) e dopo la parentesi di chiusura per aggiungere un punto e virgola.

++ Funzione con, funzione C ++, prototipo di funzione

I nomi di variabile, parametro nel prototipo possono essere omesse. Quanto segue è equivalente al prototipo, sopra tale.

++ Funzione con, funzione C ++, prototipo di funzione

A mio parere, è meglio dichiarare i prototipi di funzione, indicando i nomi dei parametri. Specialmente se più opzioni e hanno lo stesso tipo. Per facilitare la lettura e comprensione del programma sarebbe meglio.

Per risolvere il problema, Che cosa significa questo articolo, Dobbiamo praticare. Vedi l'articolo da compiti a funzioni in C ++ . In essa troverete anche informazioni su, come passare le matrici a funzioni come parametri. consiglio – Non appena letto, e scrivere il codice! È auspicabile propria.

Video correlati:

Se vuoi aggiornamenti sul nostro sito web e condividere link ad articoli con i tuoi amici!

Newsletter nuove lezioni sulla programmazione: