Compartilhamento de tecnologia

Noções básicas de C para começar (1)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Bem-vindos a todos ao blog do Pirate Cat Ou——

Depois de uma longa pausa, continuemos estudando muito!

Índice

1.espaço para nome

O valor de existência do namespace:

Definição de espaço para nome:

Uso de espaço para nome:

2. Funções de entrada e saída C++

usar:

3. Parâmetros padrão

4. Sobrecarga de funções

Conclusão:


1.espaço para nome

O valor de existência do namespace:

Em C/C++, há um grande número de variáveis, funções e classes a serem aprendidas posteriormente. Os nomes dessas variáveis, funções e classes existirão no escopo global, o que pode causar muitos conflitos.O objetivo do uso de namespaces é localizar nomes de identificadores para evitar conflitos de nomenclatura ou poluição de nomes. A palavra-chave namespace parece resolver esse problema.

Em suma, quando existem múltiplas variáveis ​​com o mesmo nome no mesmo projeto, isso pode evitar conflitos de nomenclatura ou poluição de nomes, além de facilitar a distinção. Pode-se dizer que é indispensável no desenvolvimento de projetos de grande porte.

Definição de espaço para nome:

Namespace é a palavra-chave do namespace Adicione o nome do namespace após a palavra-chave e adicione {} para limitar o escopo.

  1. namespace hdmo
  2. {
  3. int a = 1;
  4. }

Perceber: Não há necessidade de adicionar ' ; ' após o último ' } ' do namespace, que é diferente de uma estrutura e semelhante a uma função.

A essência de um namespace é criar um domínio independente do escopo global. Assim como toda função tem um escopo, o escopo dos parâmetros em cada função está dentro do escopo da função.O mesmo vale para namespaces.O escopo de funções, variáveis, etc. no namespace está dentro do escopo limitado do namespace e precisa ser usado chamando o namespace., mas deve-se notar queVariáveis ​​de função no namespace, etc., têm um ciclo de vida global

O namespace só pode ser definido no escopo global e também pode ser aninhado.

No mesmo projeto, namespaces com o mesmo nome serão considerados o mesmo namespace.

  1. namespace hdmo
  2. {
  3. int a = 1;
  4. }
  5. namespace hdmo
  6. {
  7. int b = 1;
  8. }

Neste momento, os dois hdmo representam o mesmo namespace.

A biblioteca padrão C++ é armazenada no namespace chamado std (padrão) para evitar conflitos com funções em outras linguagens. É por isso que os programas C++ contêm basicamente um.

using namespace std;

Apenas para incluir a biblioteca padrão C++.

Uso de espaço para nome:

Como um namespace é um domínio, se você quiser usar suas variáveis ​​de função e outros conteúdos externamente, será necessário usar um operador como uma estrutura para realizar esta operação.

O operador de chamada de um namespace tem dois pontos:

  1. #include <stdio.h>
  2. namespace hdmo
  3. {
  4. int a = 1;
  5. }
  6. int a = 2;
  7. int main()
  8. {
  9. printf("%dn", a);
  10. printf("%dn", ::a);
  11. printf("%dn", hdmo::a);
  12. return 0;
  13. }

A partir dos resultados de saída, podemos saber que: quando a frente de :: está vazia, as variáveis ​​do escopo global são chamadas por padrão.

Existem três maneiras de usar variáveis, funções, etc. no namespace:

1.visita única: Utilize :: para acessar individualmente variáveis ​​ou funções em um namespace, que é a forma mais segura de utilizá-lo;

2.Expansão única : Use using para expandir uma variável ou função sozinha. Após a expansão, seu escopo se torna o escopo global e não é mais restrito pelo namespace. Recomenda-se usar este método em condições comuns sem conflito.

3.Totalmente expandido: Expanda diretamente todos os namespaces especificados. Não é recomendado para uso em projetos. O risco de conflito é alto. Pode ser usado em programas pequenos (a biblioteca padrão do C++ é totalmente expandida, portanto, quando usamos cin e. cout, não há necessidade de prefixar std::)

2. Funções de entrada e saída C++

Na linguagem C, nossas instruções de entrada e saída são scanf e printf respectivamente. C++ também é compatível com as instruções de entrada e saída da linguagem C, mas também possui suas próprias funções de entrada e saída, ou seja, cin e cout.

Para usar as funções cin e cout, você deve incluir<iostream>Biblioteca de fluxo de entrada e saída padrão e deve incluir a biblioteca de funções padrão C++

  1. #include <iostream>
  2. using namespace std;

usar:

Ao usar cin, use '&gt;&gt;' para entrar;

Ao usar cout, use '&lt;&lt;' para gerar.

&lt;&lt; é o operador de inserção de fluxo, &gt;&gt; é o operador de extração de fluxo (&lt;&lt; e &gt;&gt; também representam operadores de deslocamento para a esquerda e deslocamento para a direita na linguagem C)

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 0;
  6. cin >> a;
  7. cout << a << endl;
  8. printf("%dn", a);
  9. return 0;
  10. }

Podemos primeiro entender simplesmente endl como quebra de linha 'n'; a parte básica não será muito explicada e será adicionada em estudos futuros.

Podemos ver no código acima que cin e cout não usam %d, %c, etc. como scanf e printf para controlar o formato de entrada e saída das variáveis.cin e cout podem identificar automaticamente os tipos de variáveis ​​​​e dados, que é um local relativamente conveniente.

No ambiente VS2022, o código acima não contém<stdio.h> , você também pode usar as funções scanf e prinf, porque no VS<iostream>indiretamente incluído<stdio.h>, portanto pode ser usado diretamente, mas pode precisar ser incluído em outros ambientes de compilação.<stdio.h> .

Quando você deseja obter operações como precisão de controle, é recomendado usar diretamente os métodos de entrada e saída da linguagem C. Será mais problemático implementar esta operação em C++.

Deve-se notar que scanf e printf são mais rápidos que cin e cout. Na competição, scanf e printf podem ser usados ​​diretamente na questão do tempo de execução travado. O código a seguir pode melhorar a eficiência de cin e cout, mas este artigo não. explicação ainda.

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. // 在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码
  6. // 可以提⾼C++IO效率
  7. ios_base::sync_with_stdio(false);
  8. cin.tie(nullptr);
  9. cout.tie(nullptr);
  10. return 0;
  11. }

3. Parâmetros padrão

Os parâmetros padrão servem para fornecer aos parâmetros de função um valor padrão ao declarar ou definir uma função. Quando chamamos a função, se o parâmetro padrão não passar um valor, o valor padrão definido será usado. será usado.

Os parâmetros padrão são divididos em padrão completo e semi-padrão, padrão completo significa que todos os parâmetros formais recebem valores padrão, e semi-padrão significa que alguns parâmetros formais recebem valores padrão; E o C++ estipula que os parâmetros semi-padrão devem ser padronizados consecutivamente da direita para a esquerda e não podem pular para os valores padrão em intervalos.

  1. #include <iostream>
  2. using namespace std;
  3. namespace hdmo
  4. {
  5. //全缺省
  6. int Fun1(int x = 0, int y = 0)
  7. {
  8. return x + y;
  9. }
  10. //半缺省
  11. int Fun2(int x, int y = 0)
  12. {
  13. return x + y;
  14. }
  15. }
  16. int main()
  17. {
  18. cout << hdmo::Fun1() << endl;//全缺省可以不传参
  19. cout << hdmo::Fun1(1) << endl;
  20. cout << hdmo::Fun1(1,1) << endl;
  21. /*
  22. cout << hdmo::Fun2() << endl;//半缺省不能不传参
  23. */
  24. cout << hdmo::Fun2(2) << endl;
  25. cout << hdmo::Fun2(2,2) << endl;
  26. return 0;
  27. }

O resultado do código acima é:

O semi-padrão deve garantir a definição e continuidade dos parâmetros padrão da direita para a esquerda, com os parâmetros normais à esquerda e os parâmetros padrão à direita.

4. Sobrecarga de funções

Sobrecarga de função significa que existem várias funções com o mesmo nome de função ao mesmo tempo. O mesmo nome de função representa várias funções ao mesmo tempo, o que é uma sobrecarga.

A diferença entre eles é determinada pelo tipo e número do parâmetro e não tem nada a ver com o tipo do valor de retorno.Duas funções com o mesmo nome que possuem apenas tipos de valores de retorno diferentes não podem ser sobrecarregadas

  1. #include <iostream>
  2. using namespace std;
  3. namespace hdmo
  4. {
  5. int Add(int x, int y)
  6. {
  7. return x + y;
  8. }
  9. double Add(double x, int y)
  10. {
  11. return x + y;
  12. }
  13. double Add(int x, double y)
  14. {
  15. return x + y;
  16. }
  17. double Add(double x, double y)
  18. {
  19. return x + y;
  20. }
  21. }
  22. int main()
  23. {
  24. using hdmo::Add;
  25. cout << Add(1, 1) << endl;
  26. cout << Add(1.1, 1) << endl;
  27. cout << Add(1, 1.1) << endl;
  28. cout << Add(1.1, 1.1) << endl;
  29. return 0;
  30. }

O resultado é:

Pelo código acima, podemos ver que o uso de sobrecarga pode nos fazer usar funções de forma mais conveniente. Na linguagem C, para obter o efeito acima, precisamos usar quatro nomes de funções diferentes para definir quatro funções e usá-los de maneira diferente quando usados. Com sobrecarga em C++, podemos unificar todas as funções de adição, pois não há necessidade de distinguir um nome. ao usá-lo, basta usá-lo diretamente, o que é muito conveniente.

Conclusão:

Este artigo sobre os conceitos básicos de introdução ao C++ terminará aqui. Mais tarde, continuaremos a explicar outros conhecimentos básicos.

Se tiver alguma deficiência, pode apontá-la através de mensagem privada ou na área de comentários!

Pagina inicial:Blog do Gato Pirata Ou-CSDN

Aqui está a gaivota! Até a próxima~(*¯︶¯*)~