// =========================================== // Programação de Software Básico // // POLIMOSFISMO // sobreescrita de métodos // (Métodos com mesma assinatura na classe // base e na classe derivada). // // // =========================================== #include using std::cout; using std::cin; using std::string; // =========================================== class Ponto{ int x,y; public: Ponto(); Ponto(int x, int y); void Set(int x, int y); void Imprime(); }; Ponto::Ponto() { x = y = 0; cout << "PONTO: Construtora SEM parâmetros\n"; } Ponto::Ponto(int x, int y) { this->x = x; this->y = y; cout << "PONTO: Construtora COM parâmetros: " << x << ", " << y << "\n"; } void Ponto::Set(int x, int y) { cout << "PONTO: Set :" << x << ", " << y << "\n"; this->x = x; this->y = y; } void Ponto::Imprime() { cout << "PONTO: Imprime: " << "\n"; cout << "X = " << x << " Y = " << y << "\n"; } // =========================================== class Circulo: public Ponto{ private: int raio; public: Circulo(); Circulo(int x, int y, int Raio); void Set(int x, int y, int raio); void Imprime(); }; Circulo::Circulo() //:Ponto () // se não colocar isto a contrutora da // Circulo chama a mesma contrutora da Ponto, // de qq forma { raio = 0; cout << "CIRCULO: Construtora SEM parâmetros\n"; } Circulo::Circulo(int a, int b, int r) :Ponto (a,b) { raio = r; } void Circulo::Set(int x, int y, int raio) { Ponto::Set(x,y); this->raio = raio; cout << "CIRCULO: Set\n"; } void Circulo::Imprime() { cout << "CIRCULO: Imprime: " << "\n"; Ponto::Imprime(); cout << "Raio: " << raio << "\n"; } int main() { Circulo C1(5,6,-30); Ponto P(4,3); Ponto *Pptr; Circulo* Cptr; cout << "------------------------------\n"; cout << "Chamando a imprime da PONTO pelo OBJETO....\n"; P.Imprime(); cout << "Chamando a imprime da PONTO pelo PONTEIRO....\n"; Pptr = &P; Pptr->Imprime(); cout << "------------------------------\n"; C1.Set(10,23,8); cout << "Chamando a imprime da CIRCULO....\n"; C1.Imprime(); // Neste caso a função chamada vai ser da SUPER Classe, // no caso, a "Ponto" cout << "Chamando a imprime com PTR....\n"; Pptr = &C1; Pptr->Imprime(); // Neste caso a função chamada vai ser da SUPER Classe, // no caso, a "Circulo" cout << "Chamando a imprime com PTR....\n"; ((Circulo *)Pptr)->Imprime(); system("PAUSE"); return 0; } /* PONTO: Construtora COM parGmetros: 5, 6 PONTO: Construtora COM parGmetros: 4, 3 ------------------------------ Chamando a imprime da PONTO pelo OBJETO.... PONTO: Imprime: X = 4 Y = 3 Chamando a imprime da PONTO pelo PONTEIRO.... PONTO: Imprime: X = 4 Y = 3 ------------------------------ PONTO: Set :10, 23 CIRCULO: Set Chamando a imprime da CIRCULO.... CIRCULO: Imprime: PONTO: Imprime: X = 10 Y = 23 Raio: 8 Chamando a imprime com PTR.... PONTO: Imprime: X = 10 Y = 23 Chamando a imprime com PTR.... CIRCULO: Imprime: PONTO: Imprime: X = 10 Y = 23 Raio: 8 Press any key to continue . . . */