quinta-feira, agosto 10, 2006

Aula 4

Exemplo de polimorfismo:

class A
{
int a;
public:
void f();
void f(int);
void f(int, float);
void f(float, int);
};

A a;
a.f(); //A::f()
a.f(2); //A::f(int)
a.f(2, 3); //O compilador não sabe, não há um método f(int, int)


class B: public A
{
int b, c;
public:
void f();
void f(int);
};


B b;
b.f(); //B::f()
b.f(2); //B::f(int)
b.A::f() //A::f() Nome qualificado

class A
{
public:
virtual void f();
void f(int);
void f(in, float);
void f(float, int);
}; //Não alterou as respostas

retorna a classe A sem o virtual void
A* pa;
.
.
.
pa->f(); //A::f()


B* bp;
.
.
.
bp->f(); //B::f()




//Exemplos

class Primitivo2D
{
public:
virtual void Desenha() cont=0;
private:
Primitivo2D* Prox;
friend class Figura2D;
};

class Linha2D: public Primitivo2D
{
public:
void Desenha() const;
.
.
.
};

class Circulo2D: public Primitivo2D
{
public:
void Desenha() const;
.
.
.
};

class Figura2D
{
private:
Primitivo2D& Primitivo;
int NDPr;
public:
void AdicionaPrimitivo(Primitivo);
void Desenha() const;
Figura2D();
Primitivo(0);
NDPr(0);
};

void Figura2D::Desenha() const
{
for(Primitivo2D* p=Primitivo; p; p=p->Prox)
p->Desenha();
}


//void main
Figura2D f;
f.AdicionaPrimitivo(new Linha2D(...));
f.AdicionaPrimitivo(new Circulo2D(...));
.
.
.
f.Desenha();

void Figfura2D::AdicionaPrimitivo(Primitivo2D* p)
{
p->Prox=Primitivo;
Primitivo=p;
++NDPr;
}

0 comentários:

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Justin Bieber, Gold Price in India