#pragma once #include #include using namespace std; class Tataravo { public: string nome; int geracao; public: Tataravo() { nome = "bisavo, nome nao informado"; }; Tataravo(string n) { nome = n; geracao = 1; cout << "Criando tataravo: nome=" << nome << endl; }; }; // end class class Bisavo : public Tataravo { public: string pai; int geracao; public: Bisavo() { nome = "bisavo, nome nao informado"; ; }; Bisavo(string n) : Tataravo(n) { cout << " Criando bisavo: nome=" << n << endl; geracao = 2; }; void nome_do_pai(string n) { pai = n; //cout << "nome_do_pai(): pai de [" << nome << "]=[" << n << "]" << endl; }; }; // end class class Avo : public Bisavo { public: int geracao; public: Avo() { nome = "avo, nome nao informado"; }; Avo(string n) : Bisavo(n) { cout << " Criando avo: nome=" << n << endl; geracao = 3; }; }; // end class class Pai : public Avo { public: int geracao; public: Pai() { nome = "avo, nome nao informado"; }; Pai(string n) : Avo(n) { cout << " Criando pai: nome=" << nome << endl; geracao = 4; }; }; // end class class Filho : public Pai { public: int geracao; public: Filho() { nome = "filho, nome nao informado"; }; Filho(string nome) : Pai(nome) { cout << " Criando filho: nome=" << nome << endl; geracao = 5; }; }; // end class class Neto : public Filho { public: int geracao; public: Neto() { nome = "neto, nome nao informado"; }; Neto(string nome) : Filho(nome) { cout << " Criando neto: nome=" << nome << endl; geracao = 6; }; Neto(string nome, int geracao) : Filho(nome) { cout << " Criando neto: nome=" << nome << " geracao=" << geracao << endl; cout << "geracao, o parametro=" << geracao << endl; Tataravo* tataravo = this; geracao = tataravo->geracao; cout << "Todo Tataravo tem geracao=1 definida no construtor da classe" << endl; cout << "geracao, o parametro copiado do tataravo dessa instancia=" << geracao << endl; this->geracao = geracao; cout << "geracao, na classe=" << this->geracao << endl; }; }; // end class int main() { cout << "\n----- Criando Neto (usando a geracao)" << endl; Neto n("Neto", 2000); n.nome_do_pai("Pai do Neto"); cout << "Em main() a geracao do Neto ='" << n.geracao << "'" << endl; cout << "\n----- Criando Neto so com o nome" << endl; Neto outro("Outro Neto"); outro.nome_do_pai("Pai do Outro Neto"); cout << "Em main() a geracao do Outro Neto ='" << outro.geracao << "'" << endl; cout << "pai de " << n.nome << " = " << n.pai << endl; cout << "\nUsando a mesma variavel, da classe '" << typeid(n).name() << "'" << endl; cout << "Neto: " << n.geracao << endl; cout << "Filho: " << ((Filho)(n)).geracao << endl; cout << "Pai: " << ((Pai)(n)).geracao << endl; cout << "Avo: " << ((Avo)(n)).geracao << endl; cout << "Bisavo: " << ((Bisavo)(n)).geracao << endl; cout << "Tataravo: " << ((Tataravo)(n)).geracao << endl; } // end main()