nicaranha Postado Junho 22, 2020 Postado Junho 22, 2020 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.
fredericopissarra Postado Junho 22, 2020 Postado Junho 22, 2020 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;
Vinicius Antunes Osti Postado Junho 22, 2020 Postado Junho 22, 2020 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.
fredericopissarra Postado Junho 24, 2020 Postado Junho 24, 2020 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.
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.