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


6:18 AM
Unknown
0 comentários:
Postar um comentário