Ir ao conteúdo
  • Cadastre-se
felipedurar

RESOLVIDO Duvida sobre classes em C++

Recommended Posts

 Boa Tarde, eu não estou muito acostumado a usar classes em C++ e quando fui usar o compilador avisou vários erros.

 Primeiro queria saber, quando criamos uma classe ela começa nula?

 Eu vi na internet exemplos como o seguinte código:

#include <iostream>#include <string>  using namespace std;  class Person  {   string name;    int height; };  void setValues(Person&); void getValues(const Person&);  int main () {   Person p1;   setValues(p1);     cout << "Informando dados sobre a pessoa:\n";   cout << "================================\n";   getValues(p1);   return 0; }  void setValues(Person& pers) {   cout << "Informe o nome da pessoa: ";   getline(cin, pers.name);   cout << "Informe a altura em milímetros: ";   cin >> pers.height;    cin.ignore(); }  void getValues(const Person& pers) {   cout << "Nome da pessoa: " << pers.name << endl;    cout << "A altura da pessoa em milímetros é: " << pers.height << endl; }

No código acima o programador criou o objeto p1 da classe person, mas no C# quando vamos criar estes objetos colocamos algo como:

    Person p1 = new Person();

 No C# se eu não faço isso a classe fica nula, e no C++ após criar o objeto não precisamos colocar o "new NomeDaClasse()" pois parece que ela não começa nula.

 Eu tentei também fazer a seguinte comparação:

    Pessoa pessoa1;    if (pessoa1 == NULL)    {        cout << "Pessoa1 esta nulo" << endl;    }

 Esta comparação me mostrou o seguinte erro:

 error: no match for 'operator==' in 'pessoa1 == 0'

 Eu estou usando a IDE Code::Blocks com o compilador GNU GCC.

 Então como faço para fazer comparações com classes nulas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

"No C# se eu não faço isso a classe fica nula, e no C++ após criar o objeto não precisamos colocar o "new NomeDaClasse()" pois parece que ela não começa nula."

 

As classes em C++ começam com um valor arbitrario(a menos que as instancias sejam staticas ou globais),afinal o que faz sentido ser inicializado são os membros dentro dela,existem outros tipos de inicializações tambem para pods

 

"Esta comparação me mostrou o seguinte erro:"

 

porque a classe nao tem conversão para um tipo bool(NULL é uma constante 0)e o compilador pelo menos em C++ nao faz esse tipo de conversão pra voce a menos que voce faça

class X{public:    X(){}    operator bool() { return n == 0; }//A comparação seria um resultado que  se baseia se o membro é zero por exemplo    int n;};int main(){    X ob;    std::cout<<(ob == 0)<<std::endl; //Agora funcionaria}

mesmo assim é muito vago..aconselho um bom livro didatico,como o C++ Como Programar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em C++

Classe* nome_variavel = new Classe();...delete nome_variavel;

se você não usar ponteiros, ele inicia a variavel na Stack, e com new na Heap(como C#), porém no C++ você deve deletar quando não precisar mais do objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×