2011-01-19 3 views
12

So che cosa ignorare è in C++. Ma c'è lo che sovrascrive lo? Se è così, cosa significa?Sovrascrittura C++ ... sovrascrittura?

Grazie.

+0

Non ho mai sentito il termine "sovrascrittura" usato per qualcosa in relazione al C++. –

+3

L'origine del termine "sovrascrittura" potrebbe essere una pessima traduzione dal tedesco all'inglese. Il termine tecnico tedesco per "scavalcare" è "überschreiben" che letteralmente (!) Traduce in inglese come "sovrascrittura". Quindi potresti parlare tedesco? – nabulke

+0

@nabulke, ho ZD (Zertifikat Deutsh), quindi, io parlo tedesco. – Simplicity

risposta

14

Nella terminologia C++, è necessario imperativo (relative ai metodi virtuali in una gerarchia di classi) e sovraccarico (relative a una funzione con lo stesso nome ma prendendo diversi parametri). È inoltre necessario nascondere i nomi (tramite dichiarazione esplicita con lo stesso nome in un'area dichiarativa o ambito nidificato).

Il C++ standard non usa il termine "sovrascrivere" tranne nella sua forma inglese canonica (cioè, per sostituire un valore con un nuovo valore, come nell'assegnazione x = 10 che sovrascrive il valore precedente di x).

7

È possibile sovrascrivere le variabili, ad es. int a = 0; a = 42; e file (apri un file esistente per scrivere - se hai il permesso sovrascriverà il contenuto del file esistente) se è questo che intendi. Questo ha poco in relazione all'override. Stavi forse pensando di sovraccaricare?

5

La solita distinzione con cui ho familiarità è di sovraccarico e sovraccarico. Le funzioni virtuali sono sovrascritte. Le funzioni sono sovraccariche quando c'è una versione con lo stesso nome ma firma diversa (questo esiste in molte lingue). In C++ puoi anche sovraccaricare gli operatori.

AFAIK, la sovrascrittura è un concetto non correlato (sovrascrive una variabile, un file, un buffer, ecc.) E non è specifico per C++ o anche per i linguaggi OOP.

+2

In realtà non sono solo _operators_ che possono essere sovraccaricati, ma qualsiasi funzione. (IIRC, 'std :: sqrt()' è sovraccarico. – sbi

+0

@sbi: Questo è un buon punto. – Uri

2

Override è "la cosa normale" in OOP: una classe derivata fornisce un'implementazione diversa (cioè più specializzata) per qualcosa, ignorando la classe di base, ad es. apple::foo() sostituisce fruit::foo() se la mela è una classe derivata dalla frutta. (da non confondere con lo sovraccarico utilizzando diverse firme dei parametri, che porta a funzioni completamente distinte).

Sovrascrivi So di sostituire completamente con un'altra definizione. Non su un livello specifico ma in generale per il resto del programma. Questo javascript a volte viene utilizzato, se un grande quadro ha alcuni problemi particolari, e non si vuole strappare il grande file a parte:

<script type="text/javascript" 
    src="some super big framework, often in one big file"> 
<script type="text/javascript"> 
    Ext.ux.window.createWin = function() { 
    // completely OVERWRITE the implementation 
     (often to 'hotfix' a particular bug) 
    } 
</script> 

Tuttavia: Non so di qualsiasi cosa in C++, come una ridefinizione simultanea di una funzione porterebbe sempre ad errori già al momento della compilazione. Al massimo, posso immaginare puntatori di funzione di piegamento o (ri) definire ganci di richiamo.