| 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++入門