asm | auto | bad_cast | bad_typeid |
bool | break | case | catch |
char | class | const | const_cast |
continue | default | delete | do |
double | dynamic_cast | else | enum |
except | explicit | extern | false |
finally | float | for | friend |
goto | if | inline | int |
long | mutable | namespace | new |
operator | private | protected | public |
register | reinterpret_cast | return | short |
signed | sizeof | static | static_cast |
struct | switch | template | this |
throw | true | try | type_info |
typedef | typeid | union | unsigned |
using | virtual | void | volatile |
while | xalloc |
標準入力ストリーム | → cin |
---|---|
標準出力ストリーム | → cout |
標準エラー出力ストリーム | → cerr |
例:標準ストリーム
#include <iostream.h> void main() { char ss[80]; cout << "何か入力してください:"; cin >> ss; cout << "入力した文字は[" << ss << "]です\n"; }
指定 | 機能 | 用途 |
---|---|---|
oct | 8進数処理 | 入出力 |
dec | 10進数処理 | 入出力 |
hex | 16進数処理 | 入出力 |
ws | 空白読み飛ばし | 入力 |
flush | バッファのフラッシュ(強制書き出し) | 出力 |
endl | 改行出力付きflush | 出力 |
ends | '\0'を追加してflush | 出力 |
例:マニュピレータ
#include <iostream.h> void main() { int dt=255; cout << dec << dt << endl; //10進数で出力 cout << hex << dt << endl; //16進数で出力 }
実行結果
255 ff
関数プロトタイプではデフォルト値を指定できる。これを使うと引数省略形式関数が簡単に作ることができる。
例:関数プロトタイプ
#include <iostream.h> void disp(int idt=100, double ddt=123.456); //関数プロトタイプ void main() { disp(); disp(11); disp(11, 22.33); } void disp(int idt, double ddt) { cout << "idt=" << idt << " ddt=" << ddt << endl; }
実行結果
idt=100 ddt=123.456 idt=11 ddt=123.456 idt=11 ddt=22.33
C++ではブロック内のどこでも変数の宣言が可能。ただし、宣言と同時に値を評価することはできない。
例:変数の宣言位置
#include <iostream.h> void main() { for(int i=1; i<=5; i++){ //for内で変数iを宣言 cout << "i=" << i << endl; } cout << "_i=" << i << endl; //ここでも変数iは有効 }
実行結果
i=1 i=2 i=3 _i=4
グローバル変数とローカル変数が同一名の時でも、グローバル変数を使用できるようになっている。その時、使用されるのが、スコープ演算子(::)である。
例:スコープ解決演算子
#include <iostream.h> int dt=100; //グローバル変数 void main() { int dt=200,a,b; a = ::dt; //グローバル変数のdtを代入 b = dt; //ローカル変数のdtを代入 cout << "a=" << a << " b=" << b; }
実行結果
a=100 b=200
値(アドレス値)を変更できないポインタで、自動的に*演算子が適用されるものであり、変数名のエイリアス(別名)をつける。
→参照の特徴
1.初期化時にアドレスを設定するが、アドレスポインタのようなアドレス変更はできない。
2.変数値の操作しかできない。
例:参照
#include <iostream.h> void main() { int a; int& r=a; //「参照」を宣言。int &r=aとしても同じ a=100; cout << "a=" << a << " r=" << r << endl; r=200; cout << "a=" << a << " r=" << r << endl; }
実行結果
a=100 r=100 a=200 r=200
参照も関数に変数値を渡すことができる。ポインタと違い、間接演算子を使う必要がない。アドレスを渡すので、構造体などを渡す時に便利。
例:参照を関数に渡す
#include <iostream.h> void atai(int dt) //値渡し { cout << "値:" << dt; dt=0; //効果がない } void pointer(int *dt) //ポインタ渡し { cout << "ポインタ:" << *dt; *dt=0; } void sansyou(int& dt) //参照渡し { cout << "参照:" << dt; dt=0; } void main() { int a; a=100; atai(a); cout << " a=" << a << endl; a=100; pointer(&a); cout << " a=" << a << endl; a=100; sansyou(a); cout << " a=" << a << endl; }
実行結果
値:100 a=100 ポインタ:100 a=0 参照:100 a=0
引数は異なるが、同じ処理をしている場合、C++の「関数のオーバーロード機能」を使用して、関数の多重定義をすることができる。
例:関数の多重定義
#include <iostream.h> void disp(int dt) //・・・(1) { cout << "int型 " << dt << endl; } void disp(double dt) //・・・(2) { cout << "double型 " << dt << endl; } void main() { int idt=100; double ddt=12.34; disp(idt); //(1)を呼び出す disp(200); //(1)を呼び出す disp(ddt); //(2)を呼び出す disp(23.45); //(2)を呼び出す }
実行結果
int型 100 int型 200 double型 12.34 double型 23.45
C++でメモリを動的に確保/開放するためにはnew/delete演算子を使用する。new/deleteは、演算子なので、ライブラリを必要とせず、記述が簡潔になっている。
例:メモリの動的確保
#include <iostream.h> void main() { char* ss; int* dt; int i; ss = new char[80]; //C++におけるメモリ確保 st = new int[20]; //何らかの処理 delete [] ss; //C++におけるメモリ開放 delete [] dt; }
単独の変数のメモリ確保と開放
int *dt; dt=new int; delete dt;
配列のメモリ確保と開放
int *dt; dt=new int[20]; delete [] dt;
宣言時と同時にメモリ確保
char* ss = new char[80]; int* dt = new int[20];
多次元配列のメモリ確保
char (*ss)[80]; ss = new char[10][80];
多次元配列のメモリ確保(1行で書く場合)
char (*ss)[80] = new char[10][80];
C++ではユーザが定義した構造体、共用体、列挙型をint型やdouble型と同じレベルの新しいデータ型として認識するため、データ型の宣言時にstruct、union、enumなどのキーワードを記述する必要はない。
例:データ型認識
#include <iostream.h> struct hito{ //構造体 char name[50]; int age; }; union cint{ //共用体 char cdt; int idt; }; enum color{red,green,blue}; //列挙型 void main() { hito yamada; //structキーワード不要 cint dt; //unionキーワード不要 color mycol; //enumキーワード不要 yamada.age=30; dt.idt=0x4142; mycol=green; cout << "age=" << dec << yamada.age << endl; cout << "cdt=" << hex << dt.cdt << " idt=" << hex << dt.idt << endl; cout << "mycol=" << mycol << endl; }
実行結果
age=30 cdt=B idt=4142 mycol=1
参考文献
新Visual C++6.0入門 ビギナー編 part2 C++入門