nicaranha Posted June 22, 2020 at 03:23 AM Share Posted June 22, 2020 at 03:23 AM 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. Link to comment Share on other sites More sharing options...
fredericopissarra Posted June 22, 2020 at 09:21 AM Share Posted June 22, 2020 at 09:21 AM 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; Link to comment Share on other sites More sharing options...
Vinicius Antunes Osti Posted June 22, 2020 at 08:46 PM Share Posted June 22, 2020 at 08:46 PM 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. Link to comment Share on other sites More sharing options...
fredericopissarra Posted June 24, 2020 at 12:50 PM Share Posted June 24, 2020 at 12:50 PM 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.