none
Syntax do C++ RRS feed

  • 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?

    segunda-feira, 30 de janeiro de 2012 01:18

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
    segunda-feira, 30 de janeiro de 2012 18:55
  • 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());
    
    Tente esquecer C# um pouco.

    Quanto a ponteiros,sugiro dar uma olhada nesses links.

    sexta-feira, 3 de fevereiro de 2012 16:36

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
    segunda-feira, 30 de janeiro de 2012 18:55
  • 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.

    Amigo compreendi 10% e olhe lá, teria como vc explicar mais claramente? sou leigo em C++, preciso de explicações mais claras e vi que vc sabe me responder tudo, entao esta marcada como resposta, e outra poderia explicar o "gcnew" no caso o gc
    Thiii =)
    sexta-feira, 3 de fevereiro de 2012 01:19
  • 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.

    sexta-feira, 3 de fevereiro de 2012 02:34
  • 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 =)
    sexta-feira, 3 de fevereiro de 2012 15:13
  • 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 =)
    Por exemplo eu criei um projeto novo, ele gero o Form1 para mim, ai eu adicionei uma classe .cpp, como faço comunicação da form1 com a cpp?
    Thiii =)
    sexta-feira, 3 de fevereiro de 2012 15:24
  • 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());
    
    Tente esquecer C# um pouco.

    Quanto a ponteiros,sugiro dar uma olhada nesses links.

    sexta-feira, 3 de fevereiro de 2012 16:36