miércoles, 16 de septiembre de 2015

Objetos y funciones miembro const

Asi como existen datos constants que no se pueden modificar,tambien existen objetos y datos miembro que al utilizer la palabra reservada const esspecifica que un objeto no se puede modificar y si se intent modificar el compilador genera un error de sintaxis.

Ejemplo

#include <iostream>
using namespace std;
class Circulo
{
private:
    double radio;
    friend void estRadio(Circulo &, double rad);
public:
    Circulo(double rad);
    Circulo();
    void estableceRadio(double rad);
    double areaCirculo();
    void imprimeDatosCirculo();
    double obtenerRadio() const;
    void imprimeInfCirculo()const;
};
Circulo::Circulo(double rad)
{
    radio=rad;
}
Circulo::Circulo()
{
    radio=0;
}
void Circulo::estableceRadio(double rad)
{
    radio=rad;
}
double Circulo::areaCirculo()
{
    return 3.1416*radio*radio;
}
void Circulo::imprimeDatosCirculo()
{
    cout<<"\n\nDatos del circulo\n";
    cout<<"Radio: "<<radio<<endl;
    cout<<"Area: "<<areaCirculo()<<endl;
}
double Circulo::obtenerRadio() const
{
    return radio;
}
void Circulo::imprimeInfCirculo() const
{
    double const r=obtenerRadio();
    cout<<"\n\nRadio: "<<obtenerRadio()<<endl;
    cout<<"Area: "<<(3.1416*r*r)<<endl;
}
void estRadio(Circulo &c, double val)
{
    c.radio=val;
}
int main()
{
    Circulo c1;
    const Circulo c2(45.0);  // se declara el objeto c2 como constante
    estRadio(c1,15.0);
    c1.imprimeDatosCirculo();
    c1.estableceRadio(10);
    c1.imprimeDatosCirculo();
    c2.imprimeInfCirculo();    // la function miembro debe ser const

    return 0;
}

No hay comentarios:

Publicar un comentario