C ++の概要(10,000語の要約)

コンテンツ

C++とは

C++の歴史

C++キーワード

名前空間

 名前空間の定義

1.名前空間の一般的な定義

2.名前空間はネストできます

3.同じプロジェクトで同じ名前の複数の名前空間が許可され、コンパイラーは最終的にそれらを同じ名前空間に合成します。

名前空間の使用

1.名前空間名とスコープ修飾子を追加します

 2.名前空間の名前空間名を使用して紹介します

C++の入力と出力

デフォルトパラメータ

完全なデフォルト

デフォルトの半分

関数のオーバーロード


C++とは

Cは、小規模なプログラムに適した構造化されたモジュール式の言語です。複雑な問題、高度な抽象化とモデリングを必要とする大規模なプログラムには、C言語は適していません。この問題を解決するために、1980年代に、コンピューターコミュニティはOPPのアイデアを提案し、オブジェクト指向プログラミング言語が誕生しました。

1982年、Bjarne Stroustrup博士は、C言語に基づくオブジェクト指向の概念を導入および拡張し、新しいプログラミング言語を発明しました
言語とC言語の関係を表すために、C++と名付けられています。したがって、C ++はC言語に基づいており、C言語
の手続き型プログラミングを実行できるだけでなく、抽象データ型を特徴とするオブジェクトベースのプログラミングも実行でき、オブジェクト指向
プログラミングも実行できます。

C++の歴史

C++の履歴バージョン

C++キーワード

C++には63のキーワードがあります 

C言語には31があります

丸で囲んだものもC言語のキーワードです。注:flaseとtrueはC言語のキーワードではありません

名前空間

C / C ++では、変数、関数、およびクラスが多数存在し、これらの変数、関数、およびクラスの名前がグローバルスコープに適用されるため、多くの名前の競合が発生する可能性があります。

名前空間を使用する目的は、名前の競合や名前の汚染を回避するために識別子と名前をローカライズすることです。名前空間キーワードは、この問題に対処しているようです。 

 名前空間の定義

名前空間を定義するには、namespaceキーワード、名前空間の名前、{}のペアを使用する必要があります。ここで、{}は名前空間のメンバーです。

注:ネームスペースは新しいスコープを定義し、ネームスペース内のすべてはそのネームスペースに制限されます。

1.名前空間の一般的な定義

//普通命名空间 可以定义变量 可以定义函数
namespace syh
{
	int a = 1;
	int b = 2;
	int Add(int a, int b)
	{
		return a + b;
	}

}

2.名前空間はネストできます

//命名空间可以嵌套
namespace syh
{
	int a = 1;
	int b = 2;
	int Add(int a, int b)
	{
		return a + b;
	}
	namespace syh1
	{
		int a = 0;
		int b = 1;
		int Sub(int a, int b)
		{
			return a - b;
		}
	}
}

3.同じプロジェクトで同じ名前の複数の名前空間が許可され、コンパイラーは最終的にそれらを同じ名前空間に合成します。

namespace syh
{
	int a = 1;
	int b = 2;
	int Add(int a, int b)
	{
		return a + b;
	}

}
namespace syh
{
	int a = 3;
	int b = 5;
}

//最后会进行合并

名前空間の使用

namespace syh
{
	int a = 1;
	int b = 2;
	int Add(int a, int b)
	{
		return a + b;
	}

}
#include<iostream>
using namespace syh;

int main()
{
	printf("%d\n", a);
	printf("%p\n", a);
	printf("%p\n", b);

}

1.名前空間名とスコープ修飾子を追加します

NamespaceName :: NamespaceMember

printf("%d\n",syh::printf);

 2.名前空間の名前空間名を使用して紹介します

using namespace syh;

このように汚染に名前を付ける可能性があります。

汚染を防ぐために、3番目の導入方法が登場しました。

using syh::a;

このアプローチは、一部を導入するだけなので、名前の汚染を防ぎます。

C++の入力と出力

#include<iostream>
using namespace std;

int main()
{
     
    cout << "hello world" << endl;
   
   return 0;
}

 C言語には標準の入出力関数scanfとprintfがありますが、C++にはcin標準入力とcout標準出力がありますC言語でscanfおよびprintf関数を使用するには、ヘッダーファイルstdio.hをインクルードする必要があります。C ++でcinとcoutを使用するには、ヘッダーファイルiostreamとstd標準名前空間をインクルードする必要があります

C ++の入出力メソッドは、C言語よりも便利です。これは、C ++の入出力がフォーマットを制御する必要がないためです(例:%d%c)。

int main()
{
     
    cout << "hello world" << endl;
    int a = 1;
    printf("%d\n", a);;
    printf("%d\n",::a);
}

注:endl、効果は改行と同等です。

ここでは、cinの特性にも注意を払う必要があります。これはC言語のgetsに似ています。改行に遭遇すると停止しますが、cinはスペース、タブ、または改行を区切り文字として使用するため、helloworldに入るとスペースで区切られます。 。

デフォルトパラメータ

//缺省参数

void TestFunc(int a=0)
{

	cout << a << endl;
}
int main()
{
	TestFunc(10);
	TestFunc();
	return 0;
}

デフォルトパラメータは、関数が宣言または定義されて、関数のパラメータのデフォルト値を指定する場合です。関数を呼び出すとき、引数が指定されていない場合はデフォルト値が使用され、指定されていない場合は指定された引数が使用されます。

完全なデフォルト

//全缺省
 
void TestFunc(int a = 10,int b=20,int c=30)
{

	cout << a << endl;
	cout << b << endl;
	cout << c << endl<<endl;
}
int main()
{
	TestFunc(1);
	TestFunc();
	return 0;
}

すべてのデフォルトパラメータ、つまり、関数のすべての正式なパラメータがデフォルトパラメータに設定されます。

デフォルトの半分

//半缺省
void TestFunc(int a, int b = 20, int c = 30)
{

	cout << a << endl;
	cout << b << endl;
	cout << c << endl << endl;
}
int main()
{
	TestFunc(1);
	TestFunc(1);
	TestFunc(1,2,3);
	return 0;
}

注:準デフォルトのパラメーターは、右から左に順番に指定する必要があり、間隔を置いて指定することはできません。

               デフォルトのパラメーターは、関数宣言と定義の両方に表示することはできません。

               デフォルト値は定数またはグローバル変数である必要があります。

関数のオーバーロード

//函数重载
int Add(int left,int right)
{

	return left + right;
}
double Add(double left, double right)
{

	return left + right;
}
int main()
{
	cout << Add(3, 4) << endl;
	cout << Add(2.2, 1.1) << endl;
    return 0;
}

関数のオーバーロード:これは関数の特殊なケースです。C++では、同じスコープ内の同様の関数を使用して、同じ名前の複数の関数を宣言できます。同じ名前のこれらの関数の仮パラメーターリスト(パラメーターの数、タイプ、または順序)異なる必要がありますこれは、さまざまなデータタイプに類似した関数を実装する問題に対処するためによく使用されます。

戻り値のみが異なり、他のすべてが同じである場合、それは関数のオーバーロードを構成しません。

//函数重载
int Add(int left,int right)
{

	return left + right;
}
double Add(double left, double right)
{

	return left + right;
}

//void f(int a, int b, int c = 1)
//{
//
//}
//void f(int a, int b)
//{
//
//}
//
构成重载,但是一个 坑
//int main()
//{
//	cout << Add(3, 4) << endl;
//	cout << Add(2.2, 1.1) << endl;
//	f(1, 2, 3);
//	f(1, 2);
//	return 0;
//}

おすすめ

転載: blog.csdn.net/weixin_53939785/article/details/124077819