Alguma experiência e acúmulo de conhecimento em questões de escovação C ++

Contexto: Ao pontuar perguntas de múltipla escolha, algumas das respostas dos grandes nomes são muito boas. Reúna-as e é conveniente para todos.

1. A respeito da conversão entre herança de objetos. 20201101
Resposta: Conversão refere-se à alteração da representação de uma variável, alterando o tipo de uma variável para outro tipo.
O padrão C ++ define quatro novos símbolos de conversão: reinterpret_cast, static_cast, dynamic_cast e const_cast, cujo objetivo é controlar a conversão de tipo entre classes.
1) reinterpret_cast: usado para processar conversões entre tipos não relacionados, como conversão entre inteiros e ponteiros.

2) static_cast: pode ser usado para converter ponteiros ou referências entre classes base e subclasses na hierarquia de classes. É seguro converter um ponteiro ou referência de uma subclasse em uma classe base, mas não é seguro converter uma classe base em uma subclasse devido à falta de detecção de tipo dinâmico.

3) dynamic_cast: o uso de símbolos de conversão para conversão de tipo dinâmico de classes base e subclasses.Quando usado para conversão de tipo polimórfico, a conversão implícita e operações opostas são permitidas, e irá verificar a validade da operação.

4) const_cast: Utilizado para modificar o atributo const ou volatile do tipo, especificamente, pode manipular o atributo const do objeto, definir ou mover o atributo.

2. Características das operações atômicas em multithreading em C ++. 20201102
Resposta: Quando multi-threaded, as operações atômicas não precisam ser sincronizadas. O objetivo da sincronização é evitar ser interrompido por outros threads durante a operação. A operação atômica é feita em uma etapa, e não há possibilidade de ser interrompida por outros processos, portanto a sincronização não é necessária.
Por exemplo, a operação da variável de tipo multi-threaded e multi-int x, x = 1 é uma operação atômica e não precisa ser sincronizada; enquanto ++ x, x = y e x ++ todos passam pelos dois estágios de avaliação e reatribuição de valores, e não são operações atômicas, portanto, precisam ser sincronizados.

3. Uso idiomático em C ++, compreensão de IMPL e RALL. 20201102
Resposta:
1) IMPL é um padrão de design de ponte em C ++. É usado principalmente para ocultar dados e reduzir a pressão durante a compilação. A prática usual é definir uma nova classe cuja interface é a mesma da classe original, mas todos os seus os dados estão ocultos na nova classe. Por exemplo, defina uma classe A, defina uma nova classe B e ela tem a mesma interface, e seus membros de dados estão na nova classe. Não há necessidade de recompilar para fazer referência ao código A.

2) RALL, que gerencia recursos limitados. O RALL requer apenas uma pequena quantidade de código de gerenciamento (para classes em vez de objetos), pode ser universalmente aplicado ao uso de vários objetos de recursos, pode ser controlado e previsto a tempo e pode fornecer um modo unificado para gerenciamento de recursos.

3. Precauções para usar funções inline. 20201102
Resposta:
1) As funções recursivas não podem ser definidas como funções inline;
2) Geralmente aplicável a pequenas funções que não têm estruturas complexas como while e switch e têm apenas 1 a 5 instruções, caso contrário, o sistema compilador trata a função como uma normal função;
3) As duas funções internas precisam ser definidas antes de serem usadas, caso contrário, o sistema irá considerá-la uma função normal
4) A função inline não pode ser uma descrição de interface anormal.

4. Algumas considerações de cálculo sobre o tamanho da classe. 20201102
Resposta: Classe vazia, sizeof é 1 (não tem nada a ver com a existência de um construtor), mas se apenas uma função virtual for adicionada à classe vazia (nenhuma outra variável ou função é adicionada), porque um ponteiro é necessário para apontar para a função virtual Tabela, portanto, para aumentar o tamanho de um ponteiro, o tamanho específico depende do sistema.

20201109
5. As características da classe, os três elementos básicos e os cinco princípios básicos.
Resposta:
1) Três elementos básicos: encapsulamento, herança e polimorfismo.
2) Cinco princípios básicos:
a) Princípio de responsabilidade única: É melhor fazer apenas uma coisa para uma categoria. O princípio único pode ser considerado uma extensão do princípio orientado a objetos de baixo acoplamento e alta coesão.

b. O princípio de aberto e fechado: as entidades de software devem ser expansíveis, não modificáveis. Ou seja, está fechado para expansão, desenvolvimento e modificação.

c. Princípio de substituição de Liskov: a subclasse deve ser capaz de substituir sua classe base. Somente quando a subclasse pode substituir a classe base, o sistema pode reconhecer a subclasse durante a operação, que é a base para garantir a herança e a reutilização.

d. Princípio de inversão de dependência: Especificamente, os módulos de alto nível não dependem de módulos de baixo nível e ambos dependem da abstração; a abstração não depende do concreto, mas o concreto depende da abstração.

e. O princípio de isolamento de interface: use várias interfaces pequenas e dedicadas em vez de uma grande interface total.

6. Linguagens digitadas dinamicamente e linguagens digitadas estaticamente.
Resposta:
1) Linguagem digitada dinamicamente: refere-se a uma linguagem que faz a verificação do tipo de dados durante a execução. Em outras palavras, ao programar em uma linguagem digitada dinamicamente, você nunca precisa atribuir um tipo de dados a qualquer variável.A linguagem gravará o tipo de dados internamente quando você atribuir um valor à variável pela primeira vez.
2) Uma linguagem tipada estaticamente é oposta a uma linguagem tipada dinamicamente.Seu tipo de dados é verificado durante a compilação, ou seja, os tipos de dados de todas as variáveis ​​precisam ser declarados ao escrever um programa.
C / C ++, C # e JAVA são representantes da tipagem estática.

7. A quebra e continua no corpo do laço.
Resposta:
1) Break refere-se a saltar para fora de todo o corpo do loop, geralmente saltando de vários loops;
2) Continuar, refere-se a saltar deste loop, executar o próximo loop no corpo do loop, mas saltar de um único loop .

20201110
8. Algumas classes estáticas, classes não estáticas, propriedades de acesso interno e externo.
Resposta: A
classe interna estática não pode acessar diretamente os dados não estáticos da classe externa, mas pode acessar os dados estáticos da classe externa; a classe interna não estática pode acessar diretamente os dados da classe externa, incluindo dados privados.
A classe periférica e a classe interna referem-se a uma classe na qual também há uma classe no membro.A primeira classe é a classe externa, e a classe contida é chamada de classe interna.

9. Lista, conjunto, mapa sobre problemas de interface.
Resposta: Objetos de coleção, como Lista e Conjunto, herdam a interface de Coleção; Mapa é uma interface de nível superior com o mesmo nível de Coleção.

10. Em relação aos parâmetros formais da função principal.
Resposta: O primeiro parâmetro é uma variável inteira e o segundo parâmetro é uma matriz de ponteiros cujos elementos apontam para dados de caracteres.

11. Algumas características de null.
Resposta: Nulo significa que não há endereço; nulo pode ser atribuído a uma variável de referência, mas não pode ser atribuído a uma variável de tipo básico, como int, double, float, boolean.

12. Os dados do membro estático podem ser definidos dentro da classe, mas as funções do membro estático só podem ser definidas fora da classe.

13. O motivo pelo qual a função de membro estático não tem esse ponteiro.
Resposta:
1) A função de membro estático não é para uma determinada instância de objeto da classe, mas pertence a toda a classe e é comum a todas as instâncias de objeto.O escopo é global e independente do objeto de classe.
2) Este ponteiro é equivalente a um ponteiro de instância de uma classe e é usado para manipular o conteúdo de uma instância de objeto.
3) Como a função de membro estática é independente do objeto de instância da classe, o ponteiro this não pode operar a função de membro estática.

20201111
14. Para a declaração de definição: char a = '\ 82'; Qual é o valor de a?
Resposta: a = 2; \ significa caractere de escape, mas o seguinte 8 não pode ser considerado xxx hexadecimal aqui. Neste momento, deve-se considerar que da direita para a esquerda, o caractere correspondente é interceptado de acordo com o tipo de a e dado a a, onde a é do tipo char, então um 2 é interceptado e dado a a. Ou simplesmente entenda que a atribuição é da direita para a esquerda.

15. Quais são as semelhanças e diferenças entre referências e indicadores?
Resposta:
A. Os mesmos pontos:
1). Ambos são o conceito de endereços;
2) O ponteiro aponta para um bloco de memória, e seu conteúdo é o endereço da memória apontada; o apelido de um bloco de memória quando é referenciado.

B. Diferenças:
1) Um ponteiro é uma entidade e uma referência é apenas um alias;
2) Não há necessidade de desreferenciar (*) ao usar uma referência, mas um ponteiro precisa ser usado;
3) Uma referência só pode ser inicializado uma vez no momento da definição e, em seguida, imutável (observe, deve haver uma quantidade referenciada para inicializar a referência); o ponteiro é variável.
4) As referências não são constantes, os ponteiros são constantes;
5) As referências não podem ser nulas, os ponteiros podem ser nulos;
6) "sizeof reference" obtém o tamanho da variável apontada (objeto) e "sizeof pointer" obtém o tamanho do próprio ponteiro ;
7) e um incremento de ponteiro (+) não tem o mesmo significado da operação citada, depois de incrementar um ponteiro, a memória representa um movimento e as referências citadas são o valor alvo mais 1; se: int a = 0; int b = & a; int * p = & a;
b ++, significa a ++, o valor é 1; e p ++, significa p aponta para a memória atrás de a.
8) Do ponto de vista da memória, o programa alocará uma área de memória para o ponteiro, e a referência não precisa ser alocada.

20201112
16. Como entender a função strcmp (a, b)?
Resposta:
Compare as duas strings caractere por caractere da esquerda para a direita (compare de acordo com o tamanho do valor do código ASCII) até que um caractere diferente ou '\ 0' apareça. Se todos os caracteres são iguais, eles são considerados iguais; se houver caracteres diferentes ou alguns acabaram, mas um pouco inacabados, então eles podem ser considerados como diferentes.

17. Qual é a definição de uma lista vinculada heterogênea? Como entender?
Resposta:
1) (Os tipos de nós em uma lista ligada geral são todos iguais). Na lista ligada, os nós ou objetos não são todos do mesmo tipo. Este tipo de lista ligada é chamada de lista ligada heterogênea;
2) Pense nisso primeiro. Os objetos estão diretamente vinculados por uma lista vinculada, o que obviamente não é fácil de operar (pois a operação não pode ser usada). Outra forma de pensar é abstrair os pontos comuns desses objetos, construir esses pontos comuns em nós, e, em seguida, conectar esses nós em série e precisar garantir que esses nós possam acessar os objetos correspondentes, ou seja, usar ponteiros de classe abstrata para construir uma lista vinculada de objetos de classe derivados.

18. O processo do código-fonte ao código reconhecível pela máquina (.cpp ->. Exe).
Resposta:
Código-fonte -> Pré-processamento de compilação -> Compilação -> Otimizador -> Assembler -> Linker -> Arquivo executável

20201113
19. Qual é a representação de caracteres de escape em sistemas octal e hexadecimal?
Resposta:
\ 0dd significa octal, d varia de 0 a 8;
\ xhh significa hexadecimal, h varia de 0 a f.

20. Qual é a precedência do operador?
Resposta: Consulte https://www.cnblogs.com/home123/p/7519655.html
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
21. Quais são os caracteres de escape comuns?
Resposta: Consulte https://www.cnblogs.com/seer/archive/2013/06/08/3127055.html
\ a Bell
\ b Backspace
\ f Alimentação de página
\ n Alimentação de linha
\ r Retorno de carro
\ t Caractere de tabulação horizontal
\ v caractere de tabulação vertical
\ barra invertida
\? Caractere de ponto de interrogação
\ 'caractere de aspas simples
\ "caractere de aspas duplas
\ 0 caractere nulo (NULL)
\ ddd qualquer caractere
\ xdd qualquer caractere

20201118
22. Quando a função inline começa a ter efeito?
Resposta: Ele incorpora o corpo da função em cada local de chamada durante a recompilação, semelhante à função de definição de macro em tempo de compilação. (Observe que as funções inline não transferem o controle quando são chamadas.)
Além disso, as funções inline são adequadas para funções pequenas (linhas 1-5) e são frequentemente chamadas.

23. Como entender & (e operação), | (ou operação), ^ (operação OU exclusiva)?
Resposta:
1) & operação: equivalente a 1/2 da adição do mesmo bit no decimal
0101 & 0011 Resultado: binário 0001 decimal (2 ^ 0 +2 ^ 0) / 2 onde "^" significa potência

2) | Operação: equivalente a 1/2 da adição do mesmo dígito em decimal e adição de diferentes dígitos para somar
0101 | 0011 Resultado: binário 0111 decimal (2 ^ 0 +2 ^ 0) / 2 + (2 ^ 2 + 2 ^ 1)

3) ^ operação: equivalente a adicionar
0101 ^ 0011 a diferentes dígitos do sistema decimal. O resultado: sistema decimal binário 0110 (2 ^ 2 + 2 ^ 1)

A compreensão pessoal é: escreva a posição do número binário: &, o mesmo, pegue 1, caso contrário, será 0; se houver 1, tome 1, e dois 0s são 0; se ^, tome 0 para o mesmo, caso contrário, tome 1
Applet de verificação:

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

int main()
{
    
    
	int m = 123, n = 21;
	char t[10];
	_itoa_s(m, t, 2);
	printf("m二进制:%s\n", t);
	_itoa_s(n, t, 2);
	printf("n二进制:%s\n", t);

	printf("m&n:%d\n", m & n);
	printf("m|n:%d\n", m | n);
	printf("m^n:%d\n", m ^ n);
	system("pause");
	return 0;
}

Referência: https://blog.csdn.net/weixin_41074793/article/details/84943410

20201120
24. O que significa a palavra-chave final?
Resposta: A essência das variáveis ​​modificadas finais é que o valor da variável modificada (endereço ou conteúdo) não pode ser alterado. Se a modificação for uma referência, o endereço não pode ser alterado e o conteúdo do endereço ainda pode ser alterado; se a modificação for uma variável, o valor da variável não pode ser alterado.

20201125
25. E sobre a estrutura de estruturas?
Resposta:
1) structs podem fazer upload de arquivos;
2) structs são baseados no modelo MVC, que é um modelo, visualização e controlador, que é um padrão de design;
3) structs framework pode tornar a estrutura do processo mais clara;
4) structs requer muitas classes de ação, aumentará o número de arquivos.

26. Alguns membros da classe são variáveis ​​estáticas.
Resposta:
1) A variável estática não pode ser acessada através deste;
2) A variável estática pode ser acessada através do nome da classe +.

27. Pouco conhecimento de operação de pilha e heap.
Resposta:
1) Se a memória stack não for inicializada, aparecerá "hot and hot";
2) Se a memória heap não for inicializada, aparecerá "tun Tun Tun".

20201128
28, características de expressão de vírgula.
Resposta: Se houver a = expressão 1, expressão 2, ..., expressão n, então o resultado final de a é a expressão n.

29, enquanto, para pontos de atenção de julgamento condicional.
Resposta:
Quando a condição é julgada como uma declaração de atribuição, como while (x = y), for (; x = y;), se a atribuição não for 0, todas as condições serão 1 e o corpo do loop será executado ; mas quando a atribuição é 0, indica o término, o corpo do loop não será executado.

20201202
30. Palavra-chave super
Resposta:
1) O construtor da subclasse chama o construtor da superclasse para usar super;
2) Depois que a subclasse reescreve o método da classe pai, se você quiser chamar o método reescrito da classe pai, você precisa usar super ; note, O método que não foi substituído pode ser chamado diretamente.

####################################
A maioria deles são classificados fora de Niuke.com durante o processo de escovar as perguntas, graças ao respondente original para fornecer respostas ~
sem acúmulo de etapas de silício, não mais do que mil milhas

Acho que você gosta

Origin blog.csdn.net/qq_45701501/article/details/109411308
Recomendado
Clasificación