2011-01-19 17 views
12

Sé que anulando está en C++. Pero, ¿hay que sobrescribe? Si es así, ¿qué significa?C++ Anulación ... sobrescritura?

Gracias.

+0

Nunca escuché el término "sobrescribir" usado para nada en relación con C++. –

+3

El origen del término "sobrescribir" podría ser una mala traducción del alemán al inglés. El término técnico alemán para "anular" es "überschreiben" que literalmente (!) Traduce de nuevo al inglés como "sobreescritura". Entonces, ¿podría ser que hablas alemán? – nabulke

+0

@nabulke, tengo ZD (Zertifikat Deutsh), entonces, ich spreche etwas Deutsch. – Simplicity

Respuesta

14

En la terminología C++, que tienen primordial (relativa a los métodos virtuales en una jerarquía de clases) y sobrecarga (relacionado con una función con el mismo nombre pero teniendo diferentes parámetros). También tiene que oculta de nombres (a través de la declaración explícita del mismo nombre en una región declarativa anidada o alcance).

estándar El C++ no utiliza el término "sobrescribir", excepto en su forma Inglés canónica (es decir, para reemplazar un valor con un nuevo valor, como en la asignación x = 10 que sobrescribe el valor anterior de x).

7

Puede sobrescribir variables, p. Ej. int a = 0; a = 42; y archivos (abra un archivo existente para escritura; si tiene permiso, sobrescribirá el contenido del archivo existente) si eso es lo que quiere decir. Esto tiene poco en relación con la anulación. ¿Tal vez estabas pensando en sobrecargar?

5

La distinción habitual con la que estoy familiarizado es de anulación y sobrecarga. Las funciones virtuales están anuladas. Las funciones están sobrecargadas cuando hay una versión con el mismo nombre pero con una firma diferente (esto existe en muchos idiomas). En C++ también puede sobrecargar a los operadores.

AFAIK, sobrescribir es un concepto no relacionado (sobrescribir una variable, archivo, búfer, etc.) y no es específico de C++ o incluso de lenguajes OOP.

+2

En realidad, no solo se trata de "operadores" que pueden estar sobrecargados, sino de cualquier función. (IIRC, 'std :: sqrt()' está sobrecargado. – sbi

+0

@sbi: Ese es un buen punto. – Uri

2

Override es "lo normal" en OOP: Una clase derivada proporciona una implementación diferente (es decir, más especializado) para algo, anulando la clase base, por ejemplo, apple::foo() anula fruit::foo() si la manzana es una clase derivada de la fruta. (no debe confundirse con sobrecarga mediante el uso de diferentes firmas de parámetros, lo que conduce a funciones completamente distintas).

Sobrescribir Sé reemplazar por completo con otra definición. No en un nivel específico, pero en general para el resto del programa. Esto a veces se utiliza Javascript, si un gran marco tiene algunos problemas especiales, y no quiero romper la gran archivo aparte:

<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> 

Sin embargo: No sé de cualquier tal cosa en C++, como una redefinición concurrente de una función siempre llevaría a errores ya en tiempo de compilación. A lo sumo, puedo imaginar punteros de función de curvatura o (re) definir ganchos de devolución de llamada.

Cuestiones relacionadas