C ++ナレッジレビュー

C ++ナレッジレビュー

  • 値渡しパラメーター
    関数が実行されると、実際のパラメーターが仮パラメーターに割り当てられます。コピープロセスは仮パラメーター型のコピーコンストラクターによって完了します。実際のパラメーター型が異なる場合、型変換は次のようになります。実際のパラメータは形状パラメータタイプに変換されます(の場合は変換が許可されます)。パラメータタイプのデストラクタは、関数の実行時にパラメータを解放する責任があります。したがって、関数呼び出しは、仮パラメーターに対応する実パラメーターの値を変更しません。
  • 参照パラメーター
    実パラメーターは仮パラメーターの別名です。プログラムは、関数が呼び出されたときに実パラメーターの値をコピーせず、関数が戻ったときにデストラクタは呼び出されません。
  • 定数参照パラメーター
    キーワードconstを使用して、関数の変更不可能な参照パラメーターを示し、関数が実際のパラメーターを変更しないことをユーザーに通知します。
template<class T>//模板函数
T abc1(T a, T b, T c) {
    
    
	return a + b * c;
}

template<class T>//引用参数
T abc2(T &a, T &b, T &c) {
    
    
	return a + b * c;
}

template<class T1,class T2,class T3>//常量引用参数
T1 abc(const T1 &a,const T2 &b,const T3 &c) {
    
    
	return a + b * c;
}
  • 戻り値
    関数は、値、参照、または定数参照を返すことができます。関数の戻り値の型に接尾辞
    を追加すると参照の戻り値が指定されますこの形式の戻り値は、zの値を戻り値環境にコピーしません。関数が終了すると、仮パラメーターiとすべてのローカル変数のスペースが解放されます。zは実際のパラメーターへの参照にすぎず、影響を受けません。constキーワードを追加すると、const参照リターンが得られ、呼び出し環境に戻るときにconst参照リターンをconst定数に割り当てる必要があります。
template<class T>
T& mystery(int i, T &z) {
    
    
	return z
}
  • 例外のスローと例外の処理例外の
    基本クラスは例外です。
    tryブロックの後に1つ以上のcatchブロックが存在する可能性があります。例外がスローされない場合、tryブロックの通常の操作は停止します。プログラムは、この例外タイプをキャッチして実行する最初のcatchブロックに入り、他のcatchブロックを実行します。無視されます。キャッチブロックに引っ掛からない場合、プログラムは異常停止します。
int abc4(int a, int b, int c) {
    
    
	if (a <= 0 || b <= 0 || c <= 0)
		throw"All parameters should be > 0";//抛出异常
	return a + b * c;
}

int main() {
    
    
	try {
    
     cout << abc4(2, 0, 4) << endl; }
	catch (char *e) {
    
    //捕捉char*类型异常
		cout << e << endl;
		return 1;
	}
	return 0;
}
  • 動的ストレージスペース割り当て
    C ++演算子newは、動的ストレージ割り当てまたはランタイムストレージ割り当てに使用されます。その値は、割り当てられたスペースへのポインターです。deleteは、newによって割り当てられたメモリを解放するために使用されます。
    動的割り当ての1次元配列は、次のように作成できます。演算子newは、n個の整数にスペースを割り当て、最初の整数スペースへのポインターを返します。コンピュータに割り当てるのに十分なメモリがない場合、newはメモリを割り当てず、タイプbad_allocの例外をスローします。これは、try-catch構造によってキャッチされる可能性があります。
int *x=new int[n];
int n;
	try {
    
     int *x = new int[n]; }
	catch (bad_alloc) {
    
    
		cout << "out of memory" << endl;
		exit(1);
	}
delete y;//用于释放*y
delete []y;//用于释放一维数组y
  • 2次元配列の動的割り当て2
    次元配列の列または行の位置の場合は、新しい動的割り当てを使用して作成します。コンパイル時に両方が不明な場合、newを1回呼び出して2次元配列を作成することはできません。作成すると、複数の行で構成される構造と見なすことができ、各行はnewで作成できる1次元配列です。各行へのポインタは、別の1次元配列に格納されます。2次元配列のリリースにも手順が必要です。3つのコードは次のとおりです。
	char(*c)[5];
	try {
    
     c = new char[n][5]; }
	catch (bad_alloc) {
    
    
		cerr << "out of memory" << endl;
		exit(1);
	}
	char **x;//x是指向指针的指针 
	try {
    
     
		x = new char*[n]; //创建行指针
		for (int i = 0; i < n; i++)//为每一行分配空间
			x[i] = new char[m];
		return true;
	}
	catch (bad_alloc) {
    
    
		return false;
	}
	for (int i = 0; i < n; i++)//释放每一行数组空间
		delete[]x[i];
	delete[]x;//释放行指针
	x = NULL;

おすすめ

転載: blog.csdn.net/GGGGG1233/article/details/114281386