Gmail Calendar Documents Reader Web more »
Recently Visited Groups | Help | Sign in
Google Groups Home
Dúvida em polimorfismo no c++
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  7 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Rafael Sales  
View profile   Translate to Translated (View Original)
 More options Oct 22 2009, 3:16 pm
From: Rafael Sales <rafael...@gmail.com>
Date: Thu, 22 Oct 2009 16:16:24 -0300
Local: Thurs, Oct 22 2009 3:16 pm
Subject: Dúvida em polimorfismo no c++

Pessoal,
Basicamente o problema é que estou querendo passar um objeto especializado
por parametro para um construtor que recebe um objeto de uma classe mais
abstrata e não estou sabendo guarda-lo em um atributo de forma que consiga
utilizá-lo polimorficamente posteriormente.

Criei um exemplo para facilitar: http://paste.ubuntu.com/299263/
Neste programa, sai no console 2 e 0. A saída esperada era 2 e 2.
Já procurei aqui na lista e na internet e não achei exemplo que não
utilizasse ponteiro. :/

Obrigado!
Rafael Sales


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Rodrigo (skhaz)  
View profile   Translate to Translated (View Original)
 More options Oct 22 2009, 3:19 pm
From: "Rodrigo (skhaz)" <rodrigodeld...@gmail.com>
Date: Thu, 22 Oct 2009 17:19:12 -0200
Local: Thurs, Oct 22 2009 3:19 pm
Subject: Re: [ccppbrasil] Dúvida em polimorfismo no c++

Da uma olhada nessa lib
http://www.boost.org/doc/libs/1_40_0/libs/serialization/doc/index.html

2009/10/22 Rafael Sales <rafael...@gmail.com>

--
http://www.wintermoonframework.org/

    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Rafael Sales  
View profile   Translate to Translated (View Original)
 More options Oct 22 2009, 3:31 pm
From: Rafael Sales <rafael...@gmail.com>
Date: Thu, 22 Oct 2009 16:31:56 -0300
Local: Thurs, Oct 22 2009 3:31 pm
Subject: Re: [ccppbrasil] Re: Dúvida em polimorfismo no c++

Consegui!
Mudei o atributo de

> private:
>     IFuncao funcao;

para

> private:
>     IFuncao& funcao;

e no construtor mudei de:

>     Teste(IFuncao& pFuncao) {
>         this->funcao = pFuncao;
>         cout << pFuncao.f(1) << endl;
>         cout << this->funcao.f(1) << endl;
>     }

para:

>     Teste(IFuncao& pFuncao) : funcao(pFuncao) {
>         cout << pFuncao.f(1) << endl;
>         cout << this->funcao.f(1) << endl;
>     }

Rodrigo,
Estou ansioso para mexer no Boost - já ouvi falar muito dele - o prof. quer
que utilizemos o mínimo de bibliotecas e, como vai ter que ser apresentado,
vou ter que explicar o que eu utilizar do Boost para a turma e para o
professor.

Valeu!
Rafael Sales

2009/10/22 Rodrigo (skhaz) <rodrigodeld...@gmail.com>


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Thiago Adams  
View profile   Translate to Translated (View Original)
 More options Oct 22 2009, 3:56 pm
From: Thiago Adams <thiago.ad...@gmail.com>
Date: Thu, 22 Oct 2009 12:56:30 -0700 (PDT)
Local: Thurs, Oct 22 2009 3:56 pm
Subject: Re: Dúvida em polimorfismo no c++
Olá,

Objetos polimórficos têm que serem armazenados com ponteiros ou
referências.
Em algumas linguagens todo objeto é uma referência, mas _não_ é o caso
do C++.

Ex:

A b;
A a;
a = b;

a é uma cópia de b.

B b;
A a;

a = b;

Se A é a base de B então neste caso ocorre o "fatiamento" de b para
entrar em um tipo A. Além disso, o polimorfismo é perdido.

A solução é fazer:

B b;
A * a = &b;

ou

B b;
A & a = b;

agora a não é uma cópia mas sim uma referencia para b, ou um endereço
de um objeto b (ponteiro);

A decisão entre usar ponteiro e referência vai passar pelo
entendimento do tempo de vida de b e o tempo de vida de a.
Se b sempre durar mais tempo que a , e a não precisar representar o
estado "referência para nada" então pode-se usar referência.

No caso de ponteiros, b também não pode durar mais que a. No entanto
pode-se fazer a troca de dono. Ou seja, a troca do responsável por
gerenciar b; Neste caso pode ser usados smart pointers ou gerenciar na
mao.

Ex: (na mao)

lass Teste {

        IFuncao* funcao;
public:
        Teste(IFuncao* p) {
                this->funcao = pFuncao;
        }
       ~Teste() { delete funcao; }

};

Neste seu exemplo se você garantir que o objeto passado por referencia
no construtor durar mais que a classe Teste então voce pode usar
referencia.
No caso do ponteiro você ainda tem que definir (e documentar no ctor)
se Teste fica dono do recurso ou não.
No caso da funcao ser deletada em Teste , também é preciso que o
destructor seja virtual.
Também é preciso saber se o objeto precisa ser compartilhado ou
não. :-/

Infelizmente C++ é uma linguagem cheia de detalhes, mas por outro lado
dá total controle sobre que você quer fazer.
Se você quer trabalhar sem considerar os detalhes, pode usar um
shared_ptr.


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
E. Tadeu  
View profile   Translate to Translated (View Original)
 More options Oct 22 2009, 3:25 pm
From: "E. Tadeu" <e.ta...@gmail.com>
Date: Thu, 22 Oct 2009 17:25:07 -0200
Local: Thurs, Oct 22 2009 3:25 pm
Subject: Re: [ccppbrasil] Dúvida em polimorfismo no c++

Rafael, você não pode guardar o objeto por valor na sua classe... você pode
guardar como ponteiro, referência, const-ref ou smart pointer, mas não o
objeto inteiro por valor como você fez ;)

   []'s

2009/10/22 Rafael Sales <rafael...@gmail.com>


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Rafael Sales  
View profile   Translate to Translated (View Original)
 More options Oct 22 2009, 4:45 pm
From: Rafael Sales <rafael...@gmail.com>
Date: Thu, 22 Oct 2009 17:45:57 -0300
Local: Thurs, Oct 22 2009 4:45 pm
Subject: Re: [ccppbrasil] Re: Dúvida em polimorfismo no c++

Massa!
Entendi o que disseram.

Thiago,
Sou newbie em c++ (logo se vê ;p)... quem veio do Java sofre com essas
coisas... obrigado por explicar detalhadamente - não tinha achado na
internet sobre isso...
Inclusive gostaria de saber se tem algum livro/site que, durante o
aprendizado de C++, já apresenta estes problemas e soluções, pois todos os
que vi até hoje usam os velhos &, * e delete e, quando vai ver na prática,
os profissionais usam libs para gerenciar ponteiros, memória, ou utilizam
práticas que não se vê nesses livros. Pode parecer que essa é uma crítica,
mas não é: com essas linguagens de hoje tipo C#, Java, ... o que se encontra
nos livros básicos é o que os programadores avançados também usam justamente
porque a plataforma de suporte da linguagem já faz tudo...

Muito obrigado.
Rafael Sales

2009/10/22 E. Tadeu <e.ta...@gmail.com>


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Blabos de Blebe  
View profile   Translate to Translated (View Original)
 More options Oct 23 2009, 6:17 am
From: Blabos de Blebe <bla...@gmail.com>
Date: Fri, 23 Oct 2009 08:17:20 -0200
Local: Fri, Oct 23 2009 6:17 am
Subject: Re: [ccppbrasil] Re: Dúvida em polimorfismo no c++
Antes do avançado, vc precisa dominar o básico. Polimorfismo é um tópico básico.

Se você acha que vai encontrar algum framework que te livre de
entender o que é &, * e delete, bom, pode até encontrar, mas
provavelmente vai ser pra algum domínio específico.

Note que, não estou dizendo que você não quer entender, só que na
prática, você vai utilizar essas coisas como ferramentas corriqueiras,
prortanto, vc tem que ter isso na ponta da língua.

Você pediu alguns livros. Já houve uma thread na lista sobre livros,
outra sobre IDEs e coisas assim. Uma pesquisada no histórico e vc vai
encontrar, mas eu sempre gosto de citar:

http://www.research.att.com/~bs/3rd.html
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Orient...
http://www-cs-faculty.stanford.edu/~knuth/taocp.html

Abraços e bons estudos

2009/10/22 Rafael Sales <rafael...@gmail.com>:


    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2010 Google