C++ 最終レビュー

1. 正誤問題

1. オーバーロードされた挿入演算子「<<」はメンバーでオーバーロードする必要があります。True または false  (外部からオーバーロードして、フレンドを宣言できます)

2. クラス内の保護されたメンバーはパブリック メンバーと同様であり、プログラム内のどこからでもアクセスできます。間違い

3. コンストラクターをカスタマイズすると、システムはデフォルトのコンストラクターを提供しなくなります。

4. 静的データ メンバーはクラス内で定義および初期化する必要があります。False (クラス外での初期化が必要)

2. 多肢選択問題

5. new演算子に関する以下の記述において、(B)は誤りです。
A. それを使用して作成されたオブジェクトとオブジェクト配列は、delete 演算子を使用して削除できます。

B. オブジェクト配列の作成に使用する場合は、初期値を指定する必要があります

C. オブジェクトの作成にコンストラクターを使用するときにコンストラクターを呼び出す

D. オブジェクトとオブジェクト配列を動的に作成するために使用できます。

6. C++ での入出力にストリームを使用します。キーボードからの入力専用のストリームは (D)
A、cfile
B、cerr
C、cout
D、cinです。

7. this ポインタに関する正しい記述は (A) です。
A. メンバー関数には this ポインターがあります
B. クラスを定義した後、this ポインターはクラスを指します
C. this ポインターは明示的に指定する必要があります
D. 静的メンバー関数には this ポインターがあります

8. 仮想関数に関する説明では、(B)が正解です。
A. 派生クラスの仮想関数と基底クラスの仮想関数は、パラメータの数と型が異なります
B. 基底クラスに仮想関数を記述した後、派生クラスの対応する関数を記述する必要はありませんC.仮想関数は
静的メンバー関数です
D、仮想関数は非メンバー関数です

9. キーボードで文字列を入力するときは、次のことを行う必要があります (B)
A. 二重引用符を使用します
B. 記号は使用しないでください
C. 上記はすべて使用できます
D. 一重引用符を使用します

10. C++とC言語の関係の説明において、(A)は誤りです。
A. C++ 言語と C 言語は両方ともオブジェクト指向です
B. C 言語と C++ 言語には互換性があります
C. C++ 言語は C 言語にいくつかの改良を加えています
D. C 言語は C++ 言語のサブセットです

11. 次のステートメントの x と y は int 変数であることがわかっており、間違ったステートメント (D)
A, x=y++;
B, ++x=y;
C, x=++y;
D, (x +y)++;

12. 二次元配列 xxx が n 列ある場合、a[i][j] より前の要素数は (A) A
, i*n+j
B, i*n+j-1
D, j*nとなります。 +i
C、i*n+j+1

13. C++ ソース プログラムのファイル拡張子は、(C)
A、.h
B、.obj
C、.cpp
D、.libです。

14. クラスとオブジェクトに関する次の記述のうち、正しいものは (A) です。
A. コンパイラは、各オブジェクトのデータ メンバーにメモリを割り当てます。
B. コンパイラは、各クラスおよびクラスのオブジェクトにメモリを割り当てます。
C. クラスのメンバ関数は、クラスによって呼び出されます。
D. クラスのオブジェクトにはコピーがあります。メンバー関数の

3. 空白を埋める

15. オブジェクトが作成されると、プログラムはこの クラスの _construction (注: 2 つの単語で十分です) 関数を自動的に呼び出します  。

16.オブジェクト指向プログラミングの 継承(注: 2 つの単語で十分です) メカニズムは、プログラム リソースを再利用する方法を提供します。

17. すべてのオブジェクトは、そのクラスの_インスタンス_です(注: 2 単語で十分です)

4. 読解力

18. 次のプログラムの実行結果を答えてください。

class a2 {
public:
	virtual void act1();
	void act2() { act1(); }
};

void a2::act1() {
	cout << "a2" << endl;
}
class c :public a2 {
public:
	void act1();
};
void c::act1() {
	cout << "c" << endl;
}
int main() {
	c b;
	b.act2();
}

出力: c


19、

int AD(int a[], int n) {
	int x = 1;
	for (int i = 0; i < n; i++)
		x *= a[i];
	return x;
}

int main() {
	int a[] = { 2,8,6,5 };
	cout << AD(a, 4) << endl;
}

出力: 480


20. 話し合ってみましょう: (100 ワード以内)
(1) 構造体とクラスの違いは何ですか?

  1. メンバーへのデフォルトのアクセス: 構造体のメンバーはデフォルトでパブリックであり、クラスのメンバーはデフォルトでプライベートです。
  2. デフォルトの継承方法: struct はデフォルトで public として継承し、class はデフォルトで private として継承します。
  3. class と typename を使用してテンプレート パラメーターを定義することもできますが、struct は使用できません。

(2) どのような状況下で 2 つのプログラムは機能的に同等になるように設計されていますか?

  1. クラスを定義できる
  2. C++のC言語と互換性があるので、 C++のstruct 構造体として利用可能
  3. どちらもメンバー変数、メンバー関数を持つことができ、 、 、データ メンバーを定義することpublicprivateできprotectedます
  4. 構造体が定義されたら、その構造体名を使用してクラスのようなオブジェクトを作成できます。
  5. どちらも継承または継承でき、仮想関数を持つこともできます

21. 配列とポインタの違いは何ですか?(50 文字以内)
次のコードでは、sizeof(a) の出力は何バイトですか? sizeof(p) の出力は何バイトですか?

char a[] = "こんにちは世界";

char *p = a;

cout<< sizeof(a) << endl;

cout<< sizeof(p) << endl;

答え:

  1. 格納方法:配列はメモリ上に連続的に格納され、静的領域またはスタック上に連続したメモリ空間が開かれます。ポインタはメモリ領域を指していますが、ポインタの記憶領域を決定できません。
  2. 代入: 同じ型のポインタ変数は相互に代入できますが、配列は代入できず、1 つずつ代入またはコピーすることしかできません。配列のアドレスと容量はライフサイクル中は変化せず、配列の内容のみが変更可能ですが、ポインタは異なり、ポインタが指すメモリ領域のサイズはいつでも変更できます。ポインタは定数文字列を指しているため、その内容は変更できません。

サイズ(a)=12サイズ(p)=4;


 22、

class A {
	int a, b;
public:
	A() { a = b = 0; }
	A(int aa, int bb) :a(aa), b(bb) {
		cout << "a=" << a << "," << "b=" << b << endl;
	}
	~A() { cout << "DESTRUCTOR!\n"; }
};
int main() {
	A x, y(2, 3);
}

最初の空: a=2、b=3

セカンドエンプティ: デストラクター!

3番目のスペース: デストラクター!


24. プロセスとスレッドの違いについて話し合ってみましょう。(100 ワードに制限) (アドレス空間、オーバーヘッド、同時実行性、メモリ標準)

プロセスとスレッドの主な違いは、オペレーティング システムのリソース管理方法が異なることです。

  1. プロセスには独立したアドレス空間があり、スレッドには独自のスタックとローカル変数がありますが、スレッド間には独立したアドレス空間はありません。
  2. プロセスとスレッドを切り替える場合、プロセスとスレッドのコンテキストを切り替える必要がありますが、プロセスのコンテキスト切り替え時間はスレッドのコンテキスト切り替え時間よりもはるかに長く、大量のリソースを消費し、効率が低くなります。
  3. プロセスの同時実行性が低い、スレッドの同時実行性が高い同時実行と並列処理の違いは何ですか? - 志胡 (zhihu.com)
  4. 独立した各プロセスには、プログラム実行エントリ、順次実行シーケンス、およびプログラム出口があります。ただし、スレッドは独立して実行できず、アプリケーション プログラムに依存する必要があり、アプリケーション プログラムは複数のスレッド実行制御を提供します。
  5. システムの実行中、システムはプロセスごとに異なるメモリ空間を割り当てますが、CPU を除くスレッドにはメモリ空間を割り当てません (スレッドによって使用されるリソースは、プロセスのリソースから取得されます)。共有リソースのみ
  6. プロセスがクラッシュしても、保護モードの他のプロセスには影響しません。スレッドがクラッシュすると、プロセス全体が停止します。したがって、マルチプロセッシングはマルチスレッドよりも堅牢です。

25. バブルソートアルゴリズムの時間計算量はどれくらいですか?
O(n^2)


26. ファイル data.txt に整数のセットがあります。ソートして別のファイル result.txt に出力する必要がある C++ コードを設計してみてください。
 

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

void Sort(vector<int> &data)
{
	for(int i=1; i < data.size(); i++)
	{
		int tmp = data[i];
		for(int j=i-1; j>=0 && tmp < data[j]; j--)
			data[j+1] = data[j];
		data[j+1] = tmp;
	}
}
 
int main()
{
	void Sort(vector<int> &data);
 
	ifstream in("data.txt");
	if(!in)
	{
		cout << "file error" << endl;
		exit(1);
	}
 
	int tmp;
	vector<int> data;
	while(!in.eof())
	{
		in>>tmp;
		data.push_back(tmp);
	}
    
	Sort(data);
 
	ofstream out("result.txt");
	if(!out)
	{
		cout << "file error!" << endl;
		exit(1);
	}
 
	for(vector<int>::iterator it=data.begin(); it != data.end(); it++)
		out << *it << " ";
 
	out.close();
	return 0;
}

先生に陰口を叩かれて、ウーウーウーが問題を落として、本当に、死ぬほど泣きました……。

Supongo que te gusta

Origin blog.csdn.net/weixin_56316833/article/details/131147094
Recomendado
Clasificación