// Programa clas29.cpp de exemplo para ilustrar conceitos // ponteiros em objetos de classe derivada // Original do livro TURBO C++ SCHILDT pg 436 #include #include class B_class { char nome [80]; public: void insere_nome(char *s) {strcpy(nome, s); } void mostra_nome() {cout << nome << "\n";} }; class D_class : public B_class { char num_tel[20]; public: void insere_tel(char *num) { strcpy(num_tel, num); } void mostra_tel() {cout << num_tel << "\n";} }; main(void) { B_class *p; B_class B_obj; D_class *dp; D_class D_obj; p=&B_obj; // endereco da base // acessa B_class via ponteiro p->insere_nome("Thomas Edison"); // acessa D_class via ponteiro base p=&D_obj; p->insere_nome("Albert Einstein"); // mostra que cada nome foi para seu objeto B_obj.mostra_nome(); D_obj.mostra_nome(); cout << "\n"; /* as funcoes insere_tel e mostra_tel nao fazem parte da class base e nao podem ser acessadas via ponteiro da base p. Devem ser acessadas diretametne ou via ponteiro da derivada */ dp = &D_obj; dp->insere_tel("555 5551234"); p->mostra_nome(); dp->mostra_nome(); // igual ao anterior... dp->mostra_tel(); return 0; } /* resultado: Thomas Edison Albert Einstein Albert Einstein Albert Einstein 555 5551234 */