c++入門(ネーミングスペース入出力パラメータデフォルト)

5078 ワード

この記事では、c++(c++11標準)のいくつかの入門知識について説明します.
1.ネーミングスペース
2.C++入出力
3.デフォルトパラメータ
4.関数のリロード
5.参照
6.autoキーワード(C++11)
7.ポインタの空の値—nullptr(C++11)
**
1.ネーミングスペース
ネーミングスペースの定義と使用
C/C++では、変数、関数、および後で学習するクラスが大量に存在します.これらの変数、関数、クラスの名前はグローバルな役割ドメインに存在し、多くの競合を引き起こす可能性があります.ネーミングスペースを使用する目的は、ネーミング競合や名前汚染を回避するために識別子の名前をローカライズすることであり、namespaceキーワードの出現はこのような問題に対応している.ネーミングスペースを定義するには、namespaceキーを使用し、ネーミングスペースの名前を付けてから、ネーミングスペースのメンバーとしてペア{}を付ける必要があります.
            ,                   
namespace N1  // N1         
{  
	int a;
	int Add(int left, int right)
	{
		return left + right;
	}
}

int main()
{
	printf("%d", N1::a);
	return 0;

}


さらにネーミングスペースはネスト定義することができ、例えば、上述のN 1でネストしてN 2を定義する.
namespace N1  // N1         
{
	int a = 10;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace N2
	{
		int b = 20;
		int Sub(int x, int y)
		{
			return x - y;
		}
	}
}
int main()
{
	printf("%d", N1::a);
	printf("%d", N1::N2::b);
	system("pause");
	return 0;

}


ネーミングスペースを使用する場合は、usingで変数を導入するか、using namespaceでネーミングスペースを導入して使用することもできます.
2.c++の入出力
c++でcin(標準入力)とcout(標準出力)文を使用して入出力を行います.いずれもiostreamヘッダファイルに含まれています.標準ネーミングスペースstdも使用するには、出力演算子「<>」を使用して、2つの数とを求める世代コードを見てみましょう.
#include
using namespace std;
int main()
{
	int a = 0;
	int b = 0;
	cin >> a >> b;
	cout << "a+b=" << a + b << endl;
	return 0;
}

3.パラメータデフォルト
概念:デフォルトのパラメータは、関数を宣言または定義するときに関数のパラメータにデフォルト値を指定します.この関数を呼び出すときに、実パラメータが指定されていない場合はデフォルト値を使用します.そうでない場合は、指定した実パラメータを使用します.
#include
using namespace std;
int Add(int x = 10, int y = 20)//     
{
	return x + y;

};
int main()
{
	cout << Add() << endl;//      
	cout << Add(3, 5) << endl;?//       
	return 0;
}


パラメータのデフォルトには、半パラメータのデフォルトもあります.
#include
using namespace std;
int Sub(int a, int b = 5)//     
{
	return a - b;
}
int main()
{
	cout << Sub(8) << endl;
	cout <

パラメータのデフォルトでは、
1.半デフォルトパラメータは右から左へ順に与えなければならず、間隔を置いて与えることはできない.デフォルトのパラメータは、関数宣言と定義で同時に表示されません(エラーを認識できないようにします).
4.関数のリロード
コンセプト:同じ役割ドメインでいくつかの機能が似ている同名関数を宣言します.これらの同名関数のパラメータリスト(パラメータの個数またはタイプまたは順序)は異なる必要があります.これをリロード関数と呼びます(main関数はリロードできません)
//      
Record lookup(const Account&);
Record lookup(const Phone&);
Record lookup(const Name&);
//               ,                  ,                       。


なぜc++は関数のリロードをサポートしますか?コンパイラは、プログラムを実行するときにコンパイルされるプロシージャがあり、このプロシージャでは関数名と変数の名前を改編します.c言語では、関数名に下線を付けることを重視します.Addですが、C++は関数のリロード、ネーミングスペースなどをサポートするため、修飾規則が複雑であるため、異なるコンパイラの下位層での実装方法に違いがある可能性があります.
int Add(int left, int right); 
double Add(double left, double right);

int main() 
{ 
	Add(1, 2);  
	Add(1.0, 2.0); 
	return 0;
}
//test.obj : error LNK2019:           "int __cdecl Add(int,int)" (?Add@@YAHHH@Z),       _main     
//test.obj : error LNK2019:           "double __cdecl Add(double,double)" (???Add@@YANNN@Z),       _main     
          ,                          。   c++          


5.参照
コンセプト:リファレンスは変数に別の名前を付け、リファレンスタイプは別のタイプを参照します.コンパイラはリファレンス変数にメモリ領域を開きません.リファレンスの変数と同じメモリ領域を共有します.注意:参照は初期化する必要があります.リファレンスを定義するとき、リファレンスはリファレンスにコピーするのではなく、初期値にバインドされています.これにより、参照がエンティティを参照すると、他のエンティティを参照できなくなります.ただし、1つのエンティティには複数の参照、参照の定義があります.
int i=1024;
int &r=i;//r   int      ,
int &r=20;//               
double b=10;
int &r=b;//           

参照をパラメータとして使用
void reset(int &i)
{
	i = 0;

}
int main()
{
	int j = 20;
	reset(j);
	cout << j << endl;
	system("pause");
}
//     reset            i   j      ,    i     j    0

ポインタと参照の違い
参照は定義時に初期化する必要があり、ポインタには要求がありません.参照は、初期化時に1つのエンティティを参照すると、他のエンティティを参照することはできません.ポインタは、いつでも同じタイプのエンティティ3を指すことができます.NULL参照はありませんが、NULLポインタ4があります.sizeofでは意味が異なる:参照結果は参照タイプのサイズであるが、ポインタは常にアドレス空間が占めるバイト数(32ビットプラットフォームでは4バイト)である.自己加算参照を参照するエンティティは1増加し、ポインタは自己加算ポインタから1つのタイプのサイズ6に後退する.マルチレベルポインタはあるが、マルチレベル参照はない.エンティティへのアクセス方法は異なり、ポインタは明示的に参照を解く必要があり、参照コンパイラは自分で処理する.参照はポインタよりも比較的安全です
6.autoキーワード(C++11)
C++11ではautoはストレージタイプインジケータではなく、新しいタイプインジケータとしてコンパイラを示し、autoが宣言した変数はコンパイラがコンパイラのコンパイル時期に導出しなければならない.注意:autoを使用して変数を定義する場合は初期化する必要があります.コンパイルフェーズコンパイラでは、初期化式に基づいてautoの実際のタイプを導出する必要があります.したがってautoは「タイプ」の宣言ではなく、タイプ宣言時のプレースホルダであり、コンパイラはコンパイル中にautoを変数の実際のタイプに置き換えます.
7.ポインタの空の値—nullptr(C++11)
C++11はなぜNULLをベースに拡張しないのか.これはNULLが以前はマクロであり、コンパイラメーカーによってNULLの実現が異なる可能性があり、NULLを直接拡張することで、以前の古いプログラムに影響を与える可能性があるからだ.したがって、混同を回避するために、C++11はnullptrを提供し、すなわちnullptrはポインタ空の定数を表す.nullptrにはnullptr_というタイプがあります.t,ポインタタイプに暗黙的に変換できるだけ,nullptr_tはヘッダファイルに定義される.注意:1.nullptrを使用してポインタの空の値を表す場合、nullptrはC++11が新しいキーワードとして導入されるため、ヘッダファイルを含める必要はありません.2.C++11において、sizeof(nullptr)はsizeof(void*)0)が占めるバイト数と同じである.3.コードの堅牢性を向上させるためにnullptrを使用することを推奨します.