nicaranha Postado Junho 22, 2020 em 03:23 Compartilhar Postado Junho 22, 2020 em 03:23 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 para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Junho 22, 2020 em 09:21 Compartilhar Postado Junho 22, 2020 em 09:21 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 para o comentário Compartilhar em outros sites More sharing options...
Vinicius Antunes Osti Postado Junho 22, 2020 em 20:46 Compartilhar Postado Junho 22, 2020 em 20:46 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 para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Junho 24, 2020 em 12:50 Compartilhar Postado Junho 24, 2020 em 12:50 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 para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.