C ++ブラッシングの質問におけるいくつかの経験と知識の蓄積

背景:多肢選択式の質問を採点する場合、大物の回答のいくつかは非常に優れています。それらを収集すると、誰にとっても便利です。

1.オブジェクト継承間の変換について。20201101
回答:変換とは、変数の型を別の型に変更することによって変数の表現を変更することを指します。
C ++標準では、reinterpret_cast、static_cast、dynamic_cast、const_castの4つの新しい変換シンボルが定義されています。これらの目的は、クラス間の型変換を制御することです。
1)reinterpret_cast:整数とポインター間の変換など、無関係なタイプ間の変換を処理するために使用されます。

2)static_cast:クラス階層内の基本クラスとサブクラスの間でポインターまたは参照を変換するために使用できます。サブクラスのポインタまたは参照を基本クラスに変換することは安全ですが、動的型検出がないため、基本クラスをサブクラスに変換することは安全ではありません。

3)dynamic_cast:基本クラスとサブクラスの動的型変換に変換シンボルを使用します。ポリモーフィック型変換に使用する場合、暗黙的な変換と反対の操作が許可され、操作の有効性がチェックされます。

4)const_cast:型のconstまたはvolatile属性を変更するために使用されます。具体的には、オブジェクトのconst属性を操作したり、属性を設定または移動したりできます。

2. C ++のマルチスレッドでのアトミック操作の機能。20201102
回答:マルチスレッドの場合、アトミック操作を同期する必要はありません。同期の目的は、操作中に他のスレッドによって中断されないようにすることです。アトミック操作は1つのステップで実行され、他のプロセスによって中断される可能性がないため、同期は必要ありません。
たとえば、マルチスレッドおよびマルチ整数型の変数x、x = 1の操作はアトミック操作であり、同期する必要はありませんが、++ x、x = y、およびx ++はすべて次の2つの段階を通過します。値の評価と再割り当てであり、アトミック操作ではないため、同期する必要があります。

3. C ++での慣用的な使用法、IMPLとRALLの理解。20201102
回答:
1)IMPLはC ++のブリッジデザインパターンです。これは主にデータを非表示にし、コンパイル中のプレッシャーを軽減するために使用されます。通常は、インターフェイスが元のクラスと同じであるが、すべてが同じである新しいクラスを定義します。データは新しいクラスで非表示になります。たとえば、クラスAを定義し、新しいクラスBを定義すると、そのインターフェイスは同じであり、そのデータメンバーは新しいクラスにあります。Aコードを参照するために再コンパイルする必要はありません。

2)限られたリソースを管理するRALL。RALLは、少量の管理コード(オブジェクトではなくクラス用)のみを必要とし、さまざまなリソースオブジェクトの使用に普遍的に適用でき、時間内に制御および予測でき、リソース管理の統合モードを提供できます。

3.インライン関数を使用する際の注意事項。20201102
回答:
1)再帰関数をインライン関数として定義することはできません
。2)whileやswitchなどの複雑な構造を持たず、1〜5個のステートメントしかない小さな関数に一般的に適用できます。それ以外の場合、コンパイラシステムは関数を通常の関数として扱います。関数;
3)使用する前に2つの内部関数を定義する必要があります。そうしないと、システムはそれを正常な関数と見なします
。4)インライン関数を異常なインターフェイス記述にすることはできません。

4.クラスのサイズに関するいくつかの計算上の考慮事項。20201102
回答:空のクラス、sizeofは1です(コンストラクターがあるかどうかとは関係ありません)が、ポインターが必要なため、空のクラスに仮想関数が1つだけ追加されている場合(他の変数や関数は追加されていません)仮想関数テーブルを指すため、ポインタのサイズを大きくするには、特定のサイズはシステムによって異なります。

20201109
5.クラスの特徴、3つの基本要素、および5つの基本原則。
回答:
1)3つの基本要素:カプセル化、継承、およびポリモーフィズム。
2)5つの基本原則:
a。単一責任の原則:1つのカテゴリに対して1つのことだけを行うのが最善です。単一の原理は、低結合度と高凝集度というオブジェクト指向の原理の拡張と見なすことができます。

b。オープンとクローズの原則:ソフトウェアエンティティは、変更可能ではなく、拡張可能である必要があります。つまり、拡張、開発、および変更はできません。

c。リスコフの置換原則:サブクラスはその基本クラスを置き換えることができなければなりません。サブクラスが基本クラスを置き換えることができる場合にのみ、システムは操作中にサブクラスを認識できます。これは、継承と再利用を保証するための基礎です。

d。依存性逆転の原則:具体的には、高レベルのモジュールは低レベルのモジュールに依存せず、両方とも抽象化に依存します。抽象化は具体に依存しませんが、具体は抽象化に依存します。

e。インターフェース分離の原則:1つの大きな合計インターフェースではなく、複数の小さな専用インターフェースを使用します。

6.動的に型付けされた言語と静的に型付けされた言語。
回答:
1)動的に型付けされた言語:実行時にデータ型チェックを行う言語を指します。つまり、動的に型指定された言語でプログラミングする場合、変数にデータ型を割り当てる必要はありません。変数に初めて値を割り当てるときに、言語はデータ型を内部的に記録します。
2)静的に型付けされた言語は、動的に型付けされた言語の反対です。そのデータ型はコンパイル中にチェックされます。つまり、プログラムを作成するときにすべての変数のデータ型を宣言する必要があります。
C / C ++、C#、およびJAVAは、すべて静的型付けの代表的なものです。

7.ループ本体で中断して続行します。
回答:
1)ブレークとは、ループ本体全体からジャンプすることを指し、通常は複数のループ
からジャンプします。2)続行とは、このループからジャンプし、ループ本体の次のループを実行しますが、単一のループからジャンプすることを指します。

20201110
8.一部の静的クラス、非静的クラス、内部および外部アクセスプロパティ。
回答:
静的内部クラスは、外部クラスの非静的データに直接アクセスすることはできませんが、外部クラスの静的データにアクセスできます。非静的内部クラスは、プライベートデータを含む外部クラスのデータに直接アクセスできます。
周辺クラスと内部クラスは、メンバー内にクラスも存在するクラスを指します。前者のクラスは外部クラスであり、含まれているクラスは内部クラスと呼ばれます。

9.インターフェースの問題についてリスト、設定、マップします。
回答:ListやSetなどのコレクションオブジェクトはCollectionインターフェイスを継承します。MapはCollectionと同じレベルのトップレベルインターフェイスです。

10.main関数の正式なパラメーターについて。
回答:最初のパラメーターは整数変数であり、2番目のパラメーターは要素が文字データを指すポインターの配列です。

11.nullのいくつかの機能。
回答:Nullは、アドレスがないことを意味します。nullは参照変数に割り当てることができますが、int、double、float、booleanなどの基本型変数に割り当てることはできません。

12.静的メンバーデータはクラス内で定義できますが、静的メンバー関数はクラス外でのみ定義できます。

13.静的メンバー関数にこのポインターがない理由。
回答:
1)静的メンバー関数は、クラスの特定のインスタンスオブジェクト用ではなく、クラス全体に属し、すべてのオブジェクトインスタンスに共通です。スコープはグローバルであり、クラスオブジェクトから独立しています。
2)このポインタは、クラスのインスタンスポインタと同等であり、オブジェクトインスタンスのコンテンツを操作するために使用されます。
3)静的メンバー関数はクラスのインスタンスオブジェクトから独立しているため、このポインターは静的メンバー関数を操作できません。

20201111
14.定義ステートメントの場合:char a = '\ 82'; aの値は何ですか?
回答:a = 2; \はエスケープ文字を意味しますが、次の8はここではxxx16進数とは見なされません。このとき、右から左に、対応する文字がaのタイプに従ってインターセプトされ、aに与えられることを考慮する必要があります。ここで、aはcharタイプであるため、2がインターセプトされてaに与えられます。または、割り当てが右から左であることを理解してください。

15.参照とポインターの類似点と相違点は何ですか?
回答:
A。同じポイント:
1)両方ともアドレスの概念です;
2)ポインタはメモリのブロックを指し、その内容はポイントされたメモリのアドレスです;メモリのブロックのエイリアス参照。

B.違い:
1)ポインターはエンティティであり、参照はエイリアスのみです
。2)参照を使用する場合は逆参照(*)する必要はありませんが、ポインターを使用する必要があります
。3)参照のみが可能です。定義時に一度初期化され、その後不変になります(注、参照を初期化するには参照量が必要です)。ポインターは可変です。
4)参照はconstではなく、ポインターはconstです
。5)参照はnullにすることはできません。ポインターはnullにすることができます
。6)「sizeofreference」は指定された変数(オブジェクト)のサイズを取得し、「sizeofpointer」はポインター自体のサイズを取得します。 ;
7)ポインタの増分(+)は同じ意味ではなく、ポインタメモリをインクリメントした後の引用された操作は移動を表し、引用された参照はターゲット値に1を加えたものです; if:int a = 0; int b =&a; int * p =&a;
b ++は、a ++を意味し、値は1です。p++は、pがaの背後にあるメモリを指していることを意味します。
8)メモリの観点から、プログラムはポインタにメモリ領域を割り当てます。参照を割り当てる必要はありません。

20201112
16. strcmp (a、b)関数を理解するにはどうすればよいですか?
回答:
別の文字または「\ 0」が表示されるまで、2つの文字列を左から右に1文字ずつ比較します(ASCIIコード値のサイズに従って比較します)。すべての文字が同じである場合、それらは等しいと見なされます。異なる文字があるか、一部が終わっているが、少し未完成である場合、それらは等しくないと見なすことができます。

17.異種リンクリストの定義は何ですか?理解する方法は?
回答:
1)(一般的なリンクリストのノードタイプはすべて同じです。)リンクリストでは、ノードまたはオブジェクトがすべて同じタイプではありません。この種のリンクリストは異種リンクリストと呼ばれます
。2)最初に考えてみてください。オブジェクトはリンクリストによって直接リンクされていますが、これは明らかに操作が簡単ではありません(操作は使用できません)。別の考え方は、これらのオブジェクトの共通点を抽象化し、これらの共通点をノードに構築することです。次に、これらのノードを直列に接続し、これらのノードが対応するオブジェクトにアクセスできることを確認する必要があります。つまり、抽象クラスポインターを使用して、派生クラスオブジェクトのリンクリストを作成します。

18.ソースコードからマシン認識可能なコード(.cpp->。exe)へのプロセス。
回答:
ソースコード->コンパイル前処理->コンパイル->オプティマイザー->アセンブラー->リンカー->実行可能ファイル

20201113
19. 8進数および16進数のシステムでのエスケープ文字の表現は何ですか?
回答:
\ 0ddは8進数、dの範囲は
0〜8 \ xhhは16進数、hの範囲は0〜fです。

20.演算子の優先順位は何ですか?
回答:https://www.cnblogs.com/home123/p/7519655.htmlを参照してください。21
ここに画像の説明を挿入
ここに画像の説明を挿入
。一般的なエスケープ文字は何ですか。
回答:https://www.cnblogs.com/seer/archive/2013/06/08/3127055.htmlを参照してください
\ aベル
\ bバックスペース
\ fページフィード
\ n改行
\ rキャリッジリターン
\ t水平集計文字
\ v垂直タブ文字
\バックスラッシュ
\?疑問符文字
\ '一
重引用符\ "二重引用符
\ 0ヌル文字(NULL)
\ ddd任意の文字
\ xdd任意の文字

20201118
22.インライン関数はいつ有効になりますか?
回答:コンパイル時のマクロ定義の関数と同様に、再コンパイル時にすべての呼び出し場所に関数本体が埋め込まれます。(インライン関数は、呼び出されたときに制御を転送しないことに注意してください。)
さらに、インライン関数は小さな関数(1〜5行目)に適しており、頻繁に呼び出されます。

23。&(および操​​作)、|(または操作)、^(排他的論理和操作)を理解する方法は?
回答:
1)&操作:10進数で同じビットを加算した1/2に相当
0101&0011結果:2進数0001 10進数(2 ^ 0 +2 ^ 0)/ 2ここで、「^」は電力を表します

2)|操作:10進数で同じ桁を加算して合計
0101に異なる桁を加算する1/2に相当| 0011結果:2進数0111 10進数(2 ^ 0 +2 ^ 0)/ 2 +(2 ^ 2 + 2 ^ 1)

3)^操作:10進法の異なる桁に
0101 ^ 0011を追加するのと同じです。結果:2進011010進法(2 ^ 2 + 2 ^ 1)

個人的な理解は次のとおりです。2進数の位置を記述します:&、同じ、1を取る、それ以外の場合は0、1がある場合は1、2つの0は0、^の場合は同じ、それ以外の場合は0を取る1.1。
検証アプレット:

#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;
}

参照:https://blog.csdn.net/weixin_41074793/article/details/84943410

20201120
24.最後のキーワードはどういう意味ですか?
回答:最終的に変更された変数の本質は、変更された変数の値(アドレスまたはコンテンツ)を変更できないことです。変更が参照である場合、アドレスを変更することはできず、アドレスの内容を変更することもできます。変更が変数である場合、変数の値を変更することはできません。

20201125
25.構造体フレームワークはどうですか?
回答:
1)構造体はファイルをアップロードできます;
2)構造体はモデル、ビュー、コントローラーであるMVCモデルに基づいています。これはデザインパターンです;
3)構造体フレームワークはプロセス構造をより明確にすることができます;
4)構造体は必要です多くのアクションクラスは、ファイルの数を増やします。

26.クラスの一部のメンバーは静的変数です。
回答:
1)静的変数にはこれを介してアクセスできません;
2)静的変数はクラス名+を介してアクセスできます。

27.スタックとヒープの操作に関する知識が少ない。
回答:
1)スタックメモリが初期化されていない場合は「ホットアンドホット」と表示されます
。2)ヒープメモリが初期化されていない場合は「tunTunTun」と表示されます。

20201128
28、コンマ式の特性。
回答:a =式1、式2、...、式nがある場合、aの最終結果は式nです。

29、一方、条件付き判断の注意点。
回答:
条件がwhile(x = y)、for(; x = y;)などの代入ステートメントであると判断された場合、代入が0でない場合、条件はすべて1であり、ループ本体が実行されます。 ;ただし、割り当てが0の場合、終了を示し、ループの本体は実行されません。

20201202
30.キーワードsuper
回答:
1)サブクラスコンストラクターがスーパークラスコンストラクターを呼び出してsuperを使用します
。2)サブクラスが親クラスメソッドを書き換えた後、親クラスの書き換えられたメソッドを呼び出す場合は、superを使用する必要があります。 ;注、オーバーライドされていないメソッドは直接呼び出すことができます。

###########################
元の回答者のおかげで、それらのほとんどは、質問をブラッシングするプロセス中にNiuke.comから選別されます。答えを提供するために〜
蓄積なしシリコンステップ、1000マイル以下

おすすめ

転載: blog.csdn.net/qq_45701501/article/details/109411308