Ir para conteúdo

Como se usa :: std e o que é método construtor


nicaranha

Posts Recomendados

Postado
Eu sou muito burro e não consigo entender de forma alguma pra que std  e :: servem por exemplo essa .h aqui:


#ifndef AVIAO_H_INCLUDED
#define AVIAO_H_INCLUDED

class Aviao{
  public:
    int vel=0;
    int velMax;
    std::string tipo;
    Aviao(int tp);
    void imprimir();
    private:


};, 
Aviao::Aviao(int tp){ 
       if(tp==1){
        tipo="Jato";
        velMax=800;

       }else if (tp==2){
         tipo="Monomotor";
         velMax=350;
       }else if (tp==3){
         tipo="Planador";
         velMax=180;
       }
}

void Aviao::imprimir(){
     std::cout << "Tipo.............: " << tipo << std::endl;
     std::cout << "Velocidade Maxima: " << velMax << std::endl;
     std::cout << "Velocidade Atual.: " << vel << std::endl ;
     std::cout <<"-----------------------" << std::endl;

}

#endif // AVIAO_H_INCLUDED

Eu não sei o por que desses std e ::  e também me questiono sobre o que é método construtor, se algém poder me explicar de uma maneira bem simples mas completa eu agradeceria.

 

Postado

C++ permite criar identificadores (nomes de variáveis, funções, etc) em namespaces diferentes. Por exemplo:

namespace fred { int a; };
namespace nicaranha { int a; };

Aqui, a variável 'a', do tipo 'int', no namespace 'fred' (ou fred::a) é diferente de 'a' no namespace 'nicaranha' (ou nicaranha::a).

:: é o operador de resolução de escopo.

As bibliotecas padrão de C++ (libstdc++) definem o namespace std (de "standard").

No caso, o identificador 'string' é definido no namespace std, bem como o identificador 'cout' e 'endl'. Então você tem que especificá-los com o 'std::' na frente. A não ser que, no início do código coloque o que vai abaixo e daí pode omitir a resolução de escopo...

using namespace std;
Postado

Vou tentar responder sua perguntas numa ordem que, creio, seja mais intuitiva.

0. "Eu sou burro"
Não, vc não é.

 

1. "O que é std?"

"std" é o namespace onde estão todas as coisas da biblioteca padrão de C++. Sempre que você incluir cabeçalhos da biblioteca padrão (exemplo: iostream, string, vector, etc), as funções, classes, templates, enums, etc, estarão dentro de std.

std é abreviação de standard, que significa (ou se traduz como) padrão.

1.1 "O que é namespace?"

É uma região que abstrai um "espaço de nome". Existe para diferenciar coisas de mesmo nome em códigos/bibliotecas diferentes. O Frederico deu um excelente exemplo na resposta acimaacima.

 

2. "O que é ::?"

É o operador de escopo.

- No caso de std::string, significa que string é um tipo/classe definido dentro do namespace std;

- No caso de Aviao::imprimir(...), a função imprimir está dentro da classe Aviao.

 

O uso de "Aviao::" é necessário pois se utiliza fora do escopo da declaração da classe Aviao

 

3. "O que é um construtor?"

É um método que inicializa uma instância de uma determinada classe. Em C++, esse método tem o mesmo nome da classe.

Postado

Como o Vinicius disse ai em cima, um "construtor" é uma função-membro que "contrói" (ou "inicializa") a "instância" (o objeto da classe)...

Um exemplo de "contrutor" para uma classe (e objeto) simples: Imagine que tenhamos isso:
 

// Usando 'struct' aqui, ao invés de 'class' pq é mais simples...
struct X {
  int a;
};

Isso é uma "classe", trata-se apenas da declaração da estrutura. Ainda nao existe um "objeto"... Ao fazer:
 

// Criamos um "objeto" da classe X, identificando-o por x.
X x;

O que acontecerá se fizermos, em algum lugar:
 

std::cout << x.a << std::endl;

Provavelmente obteremos "lixo"... mas, ao ser "contruído" o objeto identificado por x da classe X podemos ter uma função membro contrutora que inicializará o objeto com um valor conhecido. Por exemplo:
 

struct X
{
  int a;

  X();
};

X::X() { a = 1; }

Assim, sempre que for construída uma "instância" de X (um objeto da classe), 'a', daquele objeto, será inicializado com 1.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...