Usuário com melhor resposta
Syntax do C++

Pergunta
-
Pessoal estou com tres problemas. VC++.NET
1) porque as vezes quando declaro algo tenho que declarar assim "string ^teste" e nao "string teste", quando eu realmente devo usar o "^"?
2) Porque as vezes eu uso por exemplo "this->Text" com "->" e no "MessageBox::Show" eu uso "::", quando devo usar cada um dos dois?
3) porque as vezes eu uso por exemplo "Drawing::Icon *IC" porque e quando devo usar o "*" para declarar algo?
- Editado Thiago de bona segunda-feira, 30 de janeiro de 2012 01:20
Respostas
-
1) porque as vezes quando declaro algo tenho que declarar assim "string ^teste" e nao "string teste", quando eu realmente devo usar o "^"?
É a declaração de um ponteiro.Porém,em C++ gerenciado.Esse é destruído com o coletor de lixo.Não precisa liberar explicitamente.
2) Porque as vezes eu uso por exemplo "this->Text" com "->" e no "MessageBox::Show" eu uso "::", quando devo usar cada um dos dois?
Porque this é um ponteiro.Para o objeto atual.this->Text é amesma coisa que (*this).Text.Você deve usar a seta quando estiver utilizando ponteiros.O ponto quando não estiver usando ponteiros.
Esse operador é chamado Scope Resolution Operator.Veja aqui.
3) porque as vezes eu uso por exemplo "Drawing::Icon *IC" porque e quando devo usar o "*" para declarar algo?
Você deve usar quando quiser declarar um ponteiro e não uma variável.Um ponteiro armazena um endereço na memória de outra variável ao invés de um valor,como uma variável.Mais sobre ponteiros aqui.
- Sugerido como Resposta Ari C. Raimundo terça-feira, 31 de janeiro de 2012 02:51
- Marcado como Resposta Thiago de bona sexta-feira, 3 de fevereiro de 2012 01:18
-
Sim,o cs seria o cpp.Os arquivos .h são arquivos header - cabeçalho.No menu,adicione uma nova classe,vá em Add new file e Class e C++ Class.
Assim,vai gerar uma classe com um cabeçalho e um contstrutor.
Agora,para utilizá-la em outro arquivo,inclua o cabeçalho dessa classe:
#include "nome_do_cabeçalho_de_sua_classe.h"
No topo do arquivo.
Aqui um exemplo de como chamar uma função de outra classe:
Classe.cpp:
#include "StdAfx.h" #include "Classe.h" Classe::Classe(void) { } int Classe::Funcao(int a,int b) { return a + b; }
Classe.h:
#pragma once ref class Classe { public: Classe(void); int Funcao(int,int); };
Aqui coloquei no evento click de um botão:
Classe ^c = gcnew Classe(); // gcnew por que é um objeto gerenciado. MessageBox::Show(c->Funcao(10,10).ToString());
- Marcado como Resposta Thiago de bona sexta-feira, 3 de fevereiro de 2012 18:36
- Editado Vitor dos Santos sexta-feira, 10 de fevereiro de 2012 02:22
Todas as Respostas
-
1) porque as vezes quando declaro algo tenho que declarar assim "string ^teste" e nao "string teste", quando eu realmente devo usar o "^"?
É a declaração de um ponteiro.Porém,em C++ gerenciado.Esse é destruído com o coletor de lixo.Não precisa liberar explicitamente.
2) Porque as vezes eu uso por exemplo "this->Text" com "->" e no "MessageBox::Show" eu uso "::", quando devo usar cada um dos dois?
Porque this é um ponteiro.Para o objeto atual.this->Text é amesma coisa que (*this).Text.Você deve usar a seta quando estiver utilizando ponteiros.O ponto quando não estiver usando ponteiros.
Esse operador é chamado Scope Resolution Operator.Veja aqui.
3) porque as vezes eu uso por exemplo "Drawing::Icon *IC" porque e quando devo usar o "*" para declarar algo?
Você deve usar quando quiser declarar um ponteiro e não uma variável.Um ponteiro armazena um endereço na memória de outra variável ao invés de um valor,como uma variável.Mais sobre ponteiros aqui.
- Sugerido como Resposta Ari C. Raimundo terça-feira, 31 de janeiro de 2012 02:51
- Marcado como Resposta Thiago de bona sexta-feira, 3 de fevereiro de 2012 01:18
-
1) porque as vezes quando declaro algo tenho que declarar assim "string ^teste" e nao "string teste", quando eu realmente devo usar o "^"?
É a declaração de um ponteiro.Porém,em C++ gerenciado.Esse é destruído com o coletor de lixo.Não precisa liberar explicitamente.
2) Porque as vezes eu uso por exemplo "this->Text" com "->" e no "MessageBox::Show" eu uso "::", quando devo usar cada um dos dois?
Porque this é um ponteiro.Para o objeto atual.this->Text é amesma coisa que (*this).Text.Você deve usar a seta quando estiver utilizando ponteiros.O ponto quando não estiver usando ponteiros.
Esse operador é chamado Scope Resolution Operator.Veja aqui.
3) porque as vezes eu uso por exemplo "Drawing::Icon *IC" porque e quando devo usar o "*" para declarar algo?
Você deve usar quando quiser declarar um ponteiro e não uma variável.Um ponteiro armazena um endereço na memória de outra variável ao invés de um valor,como uma variável.Mais sobre ponteiros aqui.
Thiii =) -
gcnew cria uma instância de um objeto gerenciado(por exemplo,um Windows Form).A memória é desalocada pelo coletor de lixo(GC/Garbage Collector),você não precisa liberar explicitamente ... já o new,você instancia objetos não-gerenciados,e você precisa usar a instrução delete para destruí-los.
Diga o que você não entendeu,que tento explicar novamente.
-
Oque são ponteiros, e outra qual é a diferença entre arquivos ".cpp" e ".h" ?
No C# eu crio uma classe que a extensao é ".cs" enta no VC++.net seria o ".cpp"? e se for existe algum exemplo para postar aqui? eu crei adicionei uma .cpp no projeto que nesse caso servirá como uma classe entao... ele gero um arquivo vaziu, como faço para chamar uma fubnção do .cpp pela form?
Thiii =) -
Oque são ponteiros, e outra qual é a diferença entre arquivos ".cpp" e ".h" ?
No C# eu crio uma classe que a extensao é ".cs" enta no VC++.net seria o ".cpp"? e se for existe algum exemplo para postar aqui? eu crei adicionei uma .cpp no projeto que nesse caso servirá como uma classe entao... ele gero um arquivo vaziu, como faço para chamar uma fubnção do .cpp pela form?
Thiii =)
Thiii =) -
Sim,o cs seria o cpp.Os arquivos .h são arquivos header - cabeçalho.No menu,adicione uma nova classe,vá em Add new file e Class e C++ Class.
Assim,vai gerar uma classe com um cabeçalho e um contstrutor.
Agora,para utilizá-la em outro arquivo,inclua o cabeçalho dessa classe:
#include "nome_do_cabeçalho_de_sua_classe.h"
No topo do arquivo.
Aqui um exemplo de como chamar uma função de outra classe:
Classe.cpp:
#include "StdAfx.h" #include "Classe.h" Classe::Classe(void) { } int Classe::Funcao(int a,int b) { return a + b; }
Classe.h:
#pragma once ref class Classe { public: Classe(void); int Funcao(int,int); };
Aqui coloquei no evento click de um botão:
Classe ^c = gcnew Classe(); // gcnew por que é um objeto gerenciado. MessageBox::Show(c->Funcao(10,10).ToString());
- Marcado como Resposta Thiago de bona sexta-feira, 3 de fevereiro de 2012 18:36
- Editado Vitor dos Santos sexta-feira, 10 de fevereiro de 2012 02:22