2010-02-16 14 views
5

Demasiado C# y muy poco C++ me marea la mente ... ¿Alguien podría recordarme qué significa esta declaración de C++? Específicamente, el final "const". Muchas gracias.No entiendo la declaración del método const

protected: 
    virtual ostream & print(ostream & os) const 
+0

Gracias, Daniel, para la edición por mí. : D – smwikipedia

Respuesta

10

Un método const simplemente recibirá un puntero constthis.

En este caso, el puntero this será del tipo const ThisClass* const en lugar del tipo ThisClass* const habitual.

Esto significa que las variables miembro no se pueden modificar desde un método const. Ni siquiera los métodos no const pueden invocarse desde dicho método. Sin embargo, una variable miembro puede declararse como mutable, en cuyo caso esta restricción no se aplicará a ella.

Por lo tanto, cuando tiene un objeto const, los únicos métodos que el compilador le permitirá llamar son aquellos marcados como seguros por la palabra clave const.

+4

+1 por mencionar que 'this' es' const'. – Blindy

+1

a menos que los miembros estén etiquetados mutable – pm100

+0

@ pm100: Gracias. Se agregó una nota sobre los miembros mutables. –

4

El final const significa que la función print no debería ser capaz de cambiar el estado de cualquiera de los miembros de la clase que se declara en (y por lo tanto no puede llamar a cualquiera de las funciones miembros de esa clase que no estén también declaró const).

En el siguiente ejemplo, la función print en la clase Foo no puede cambiar cualquiera de las variables miembro de Foo (a menos que se declaran mutable), y no puede llamar a cualquier funciones no const en Foo.

class Foo { 
public: 
    Foo(string value) { m_value = value; } 
protected: 
    ostream & print(ostream & os) const { 
     m_value = string("foobar"); // won't compile 
     os << m_value; 
     return os; 
    } 
private: 
    string m_value; 
}; 
3

El const en la declaración de método indica al compilador que la función es seguro llamar en un objeto constante del tipo de la función es un miembro de. También indica al compilador que la función no debe alterar el estado del objeto y no podrá cambiar ninguna variable miembro que no esté marcada como mutable.

Si se omite la const, este código no funcionará:

const Foo bar; 
bar.print(std::cout); // Will fail to compile unless 'print' is marked const 
1

Está declarando un método virtual protegido denominado print que toma como parámetro una referencia a un ostream y devuelve una referencia a un ostream.

La palabra clave const significa que el método no podrá alterar el estado del objeto, el puntero this será const.

Un método virtual es un método cuyo comportamiento se puede anular dentro de una clase heredada, básicamente la palabra clave virtual le da a C++ su "capacidad para admitir el polimorfismo".

Y finalmente, si usted no sabe lo que es una referencia go there

Viniendo de C# supongo que sabes lo que significa :) protegida

Cuestiones relacionadas