Jump to content
Sign in to follow this  
nicaranha

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

 Read less than a minute

Recommended Posts

 Read less than a minute
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.

 

Share this post


Link to post
Share on other sites
Posted (edited)
 Read less than a minute

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;
Edited by fredericopissarra
  • Agradecer 1
  • Curtir 1

Share this post


Link to post
Share on other sites
Posted (edited)
 Read less than a minute

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.

Edited by Vinicius Antunes Osti
estava incompleto

Share this post


Link to post
Share on other sites
 Read less than a minute

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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...