← Desenvolvimento

Dúvidas gerais em C++

Lida 1960 vezes

Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Boas, penso que este tópico poderá ser útil para quem começa nesta linguagem de programação e tem algumas dúvidas simples que outros podem responder facilmente.

A minha primeira dúvida é a seguinte, porque é que este código dá-me erro de compilação:

Código: (cpp) [Seleccione]
Object object;
object= new Object(PARAMETROS);

E este não :

Código: (cpp) [Seleccione]
Object *object;
object= new Object(PARAMETROS);

Eu sei o que é um apontador, mas não estou a perceber o porquê de se ter que utilizar um nesta situação.
Offline

JoaoCardoso 
Membro
Mensagens 1518 Gostos 1
Feedback +29

Troféus totais: 32
Trófeus: (Ver todos)
Apple User Mobile User Windows User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4

só sei que para declarares o apontador tens que meter o "*" logo deve ser por aí que te da o erro no de cima e no de baixo não :)
Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Mas porque é que preciso de um apontador para inicializar um objecto? Como estou habituado a Java, não estou a perceber a lógica disto, já sei o que são apontadores mas não percebo o porquê de neste caso de ser forçado a utilizador um.
Offline

betanalista 
Membro
Mensagens 2564 Gostos 0
Feedback +18

Troféus totais: 26
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Mas porque é que preciso de um apontador para inicializar um objecto? Como estou habituado a Java, não estou a perceber a lógica disto, já sei o que são apontadores mas não percebo o porquê de neste caso de ser forçado a utilizador um.

lol

nada de novo quem aprende a programar Java e por ai fora, quando vai para algo como o C não percebe nada de nada..

Queres aprender C esquece tudo o que sabes de Java, quando perceberes de C vais saber de onde vem as coisas no Java..
Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

lol

nada de novo quem aprende a programar Java e por ai fora, quando vai para algo como o C não percebe nada de nada..

Queres aprender C esquece tudo o que sabes de Java, quando perceberes de C vais saber de onde vem as coisas no Java..


Sim, eu sei e já tomei consciência disso. No entanto há sempre conceitos fundamentais em Java que se utilizam em C++, como no caso de poo.

Agora o que eu queria mesmo saber é o facto de aquilo acontecer, alguém consegue-me explicar porquê?

Obrigado.
Offline

diogoosorio 
Membro
Mensagens 134 Gostos 1
Feedback +1

Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

johndays aqui compila sem problemas:
http://codepad.org/m6RXcUb1

Podes colocar o código completo e o erro que o compilador te está a dar?

Diverte-te (faz Search por "Pointers to classes"):
www.cplusplus.com/doc/tutorial/classes/

Btw como é óbvio não esqueças tudo o que deste em Java (que raio de conselho).

Para C (C++ nunca trabalhei) as grandes diferenças estavam na declaração de estruturas de dados (structs), o facto de ser uma linguagem estruturada e não orientada por objetos (C++ já não se aplica), a questão dos apontadores e o facto de ser o programador a ter de gerir a memória (no Java é a JVM que trata disto).
Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Exacto, o teu código eu sei que compila bem, mas porque é que não dá desta maneira? Consegues-me explicar?

Código: (cpp) [Seleccione]
Object pointer;
    pointer = new Object(23);

Obrigado
Offline

diogoosorio 
Membro
Mensagens 134 Gostos 1
Feedback +1

Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Desculpa, não percebi. Verifica:
http://codepad.org/rKQFkKKS

Agora lê:
http://groups.google.com/group/comp.lang.c++/browse_thread/thread/29618daa1c47e489 - (Subscreve a esse grupo, encontras toneladas de informação ai)

http://stackoverflow.com/questions/1238613/what-is-the-difference-between-the-dot-operator-and-in-c
http://stackoverflow.com/questions/4984600/when-do-i-use-a-dot-arrow-or-double-colon-to-refer-to-members-of-a-class-in-c
http://en.wikipedia.org/wiki/New_%28C%2B%2B%29

Sorry, fui eu que te induzi a erro na 1ª resposta. Como te disse também não domino C++ (aliás, nunca trabalhei com C++).

Se quiseres aprofundar como funciona a memória (heap vs stack, por exemplo), encontrei aqui refundido nos meus documentos:
http://tinyurl.com/67y4awr

Isso foi uma cadeira de sistemas operativos. O que Java te permite é uma abstração de toda esta "tralha".

Btw, não é publicitar a concorrência mas tens fóruns cá em Portugal onde de certeza que existe pessoal muito mais qualificado (e batido) que eu para te ajudar (então nestas linguagens de um nível mais baixo). Ou então usa mesmo o grupo de C++, ai tens malta que percebe realmente do assunto (não "arranha" o assunto, como eu).
Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Boas diogoosorio, desde já muito obrigado pela tua prestabilidade que é de enaltecer.

Quanto ao stackoverflow já conhecia, até porque uso e abuso dele, é sem sombra para dúvidas um excelente site para dúvidas. Quanto à minha dúvida já sei o porquê e passo a explicar:

Ao fazer Object o;

O objecto o já se encontra instanciado por defeito, visto que o seu construtor vazio é chamado automaticamente, sendo que fica com espaço ocupado na memória. Ao tentar fazer o=new Object(), dá erro pois o mesmo já se encontra criado.

Se fizer Object *o;

Fica reservado um espaço em memória para posteriormente ser criado um objecto do tipo Object, sendo que nenhum construtor por defeito foi chamado.

Era esta a minha dúvida. Obrigado mais uma vez.