// Programa clas31.cpp de exemplo para ilustrar conceitos // porque usar funcoes virtuais // Original do livro TURBO C++ SCHILDT pg 445 #include class figura { protected: double x, y; public: void fixa_dim(double i, double j=0) { x=i; y=j; } virtual void exibe_area() { cout << "Nenhum calculo de area definida "; cout << "para esta classe.\n"; } }; class triangulo:public figura { public: void exibe_area() { cout << "Triangulo com altura "; cout << x << " e base " << y; cout << " tem uma area de "; cout << x * 0.5 * y << ".\n"; } }; class quadrado : public figura { public: void exibe_area() { cout << "Quadrado com dimensoes "; cout << x << " x " << y; cout << " tem uma area de "; cout << x * y << ".\n"; } }; class circulo : public figura { public: void exibe_area() { cout << "Circulo com raio "; cout << x ; cout << " tem uma area de "; cout << 3.14 * x * x << ".\n"; } }; main (void) { figura *p; // cria um ponteiro para o tipo base triangulo t; // cria objetos dos tipos derivados quadrado q; circulo c; p=&t; p->fixa_dim(10.0, 5.0); p->exibe_area(); p=&q; p->fixa_dim(10.0, 5.0); p->exibe_area(); p=&c; p->fixa_dim(9.0); p->exibe_area(); return (0); } /* resultado Triangulo com altura 10 e base 5 tem uma area de 25. Quadrado com dimensoes 10 x 5 tem uma area de 50. Circulo com raio 9 tem uma area de 254.34. */