書きかけの暫定版
| C言語(89年版)の予約語 | auto | break |
case | char |
const | continue |
default | do |
|---|---|---|---|---|---|---|---|---|
double | else |
enum | extern |
float | for |
goto | if |
|
int | long |
register | return |
short | signed |
sizeof | static |
|
struct | switch |
typedef | union |
unsigned | void |
volatile | while |
|
| C++言語 で追加された予約語 | asm |
catch |
class |
delete |
friend |
inline |
new |
operator |
overload |
private |
protected |
public |
template |
this |
throw |
try |
|
virtual |
overload |
auto宣言する変数が自動変数であることを明確に指定する。
自動変数とは、自動的に記憶領域を確保して、意味のある数値を格納できる変数。
関数内部だけで使うことができる。
なにも付いてない時は自動変数となるので省略可能。
int func()
{
auto int i,j,k;
}
breakwhile(a){・・・}ならば制御ブロックから脱出し、do{・・・}while(b)ならばbreak以降を飛ばして、while(b)の評価へ飛ぶ。continueを用いる。
int i=1;
while( ++i ){
cout << "i =" << i << "\n";
if ( i ==10 ) break;// 条件成立でwhileブロックからの脱出
}
case多重分岐switch文の条件を整数で指定する
条件の整数値はラベルとして扱われるので、breakでswitchブロック制御を抜けないとswitch終わりまで実行される。
#include <iostream.h>
int main()
{
int s;
switch( s )
{
case 1:
cout << "case 1\n";
break; // このbreakはswitchブロックからの脱出
case 2:
cout << "case 2\n";
break; // このbreakはswitchブロックからの脱出
case 4:
cout << "case 4\n";
break; // このbreakはswitchブロックからの脱出
case 5:
case 6:
cout << "case 5 or case 6\n";
break; // このbreakはswitchブロックからの脱出
default: // default:ラベルは、switchブロックの一番最後のcaseラベルの後に書くのが作法。
cout << "defualt, case other 1\n"
}
return 0;
}
charunsignedの修飾がつくと0から255までとなる。char moji;
const宣言する変数が書き換えできないことを明確に宣言する。
constで修飾されたオブジェクトを書き換えようとするコードを書くと、コンパイラがそのことを警告をしてコンパイル作業を停止する。(まれに無視されることもあるらしい)
int funcName( const char * String1 )
{
cout << String1;
return 0;
}
continuewhile(a){・・・}ならば制御ブロックの先頭に飛んで式を評価し、do{・・・}while(b)ならばブロックの始めへ飛ぶ。breakを使う。defaultswitch多重分岐の最後条件でcaseの条件に合わなかったものを含めて総ての値を真値とみなす。
一番最後のcaseよりも、後に必ず記述するのが新訳聖書以降の作法である。
#include <iostream.h>
int maim();
int s
switch( s )
{
case 1:
cout << "case 1\n";
break;
case 2:
cout << "case 2\n";
break;
case 4:
cout << "case 4\n";
case 5:
case 6:
cout << "case 5 or case 6\n";
case 8:
cout << "case 5 or case 6, or case 8\n";
break;
default:
cout << "defualt 1\n"
break; // ここのbreakはいらなそうに見えるけど、書かないとVisual C++ でコンパイルできない
}
return 0;
}
プログラミング言語でない日常会話で「宴会にdefaultで出席」のような用例は、「
用事が済んだら(無かったら)無条件で出席」という意味で使われる。
銀行の人との約束にはなぜか禁句らしい。
そう言えば世の中「幾つも面接を受けたけどdefualtで今の仕事に就いた」っ
てかたも大勢いるようだ。
do繰り返しループの始まり。判定はループの最後にあるwhile文にある条件式で行うので、一回は必ずループの終わりまで実行される。
#include <iostream.h>
int main()
{
int n=10
do {
cout << "do loop, last " << n << "turn."
} while( --n);
returm 0;
}
doubleduble a;
elseif( a==b ) cout << "tuer\n"; else cout << "flase";
enum列挙型。
ただ単に、列挙されたシンボルに整数を割り付けるだけである。
何も断りが無い時は一番最初のシンボルが0になり、その次のシンボルはインクリメントされた値がわりつけられる。
代入演算子を使って代入することも出来る。
ANSI制定以後に設けられたもので、偉く古いC言語(K&R初版)では使うことが出来ないので、プリプロセスの#defineで一つずつマクロを定義するのが定番だった。
しかし、マクロの展開はかなり癖の強い前処理なので、意図したコードに展開されるマクロを記述するのが難しい。
enumを用いることで難読解なコードになりやすいマクロ定義の使用を減らすことが出来る。
enum AsciiContChar {
NUL, SOH, STX, EXT, ETO, ENQ, ACK, BEL, // 0x00 to 0x07
BS, HT, LF, VT, FF, CR, SO, SI, // 0x08 to 0x0f
DLE, DC1, DC2, DC3, DC4, NAC, SYN, ETB, // 0x10 to 0x17
CAN, EM, SUB, ESC, FS, GS, RS, SP, // 0x18 to 0x1f
DEL=0x7f // Symbol of, ASCII ContrlCharactor Code.
};
extern外部参照。
定義した変数が関数ブロックの外部にある大域変数若しくは、関数や大域変数の宣言が他のファイルにある事を明確に宣言するもの。
extern char *_environ[];
int functionName( int a )
{
extern int extObject; // 外部で宣言されている大域変数であることを明示する。
extObject =~a;
return 0;
}
floatfloat f_hensu;
for繰り返しループ。条件式が真値の間forに続く式が繰り返し実行される。
条件が偽値にならないように記述すると無限ループにを作ってしまう事になる。
for( i=0 /* 初期値などの式 */ ; i>10 /* 条件式 */ ; ++i /* 変数の増加などの式 */ )
printf("i=%d\n",i);
goto関数の外へ飛び出す無条件ジャンプを書いてはいけない。
そのような時は、C言語の場合インクルードファイルsetjmp.hに書いてある setjump() longjump()を用いて、C++言語の場合はtry throw catchを使う。
int funcName( int a )
{
if ( a < 100 ) goto label_1;
a=a++;
label_1:
a = a/2;
return a;
}
if分岐判断制御文。式が真値の時ifに続く式が実行される。
if( a==b ) cout << "tuer\n"; else cout << "flase";
intlongやshortで修飾をする。longunsignedの修飾がつくと0から4294967295までであるregisterreturnshortunsignedの修飾がつくと0から65535である。signedsignedとなる。sizeofstaticstruct構造体を宣言する。
幾つかの変数をまとめて一まとめにして扱うように宣言する。
住所録のようなデータ構造や、極座標の変数型定義をするようなときにつかう。
C++で拡張されたclassと使い方が似ているが、structの構造体にある総てのオブジェクトがclassのpublicメンバにあるのと同じ。
C++では、structはclassがあるのではあまり使わないらしい。
// 構造体の定義
struct complex {
float real;
float imaginary;
};
// 極座標の足し算
struct complex add ( struct complex a, struct complex b )
{
struct complex rtn;
rtn.real = a.real + b.real;
rtn.imaginary = a.imaginary + b.imaginary;
return rtn;
}
switch多重分岐。switchに続く整数型の変数をcaseやdefualtの条件式に合うかを判断する。
#include <iostream.h>
int maim();
int s
switch( s )
{
case 1:
cout << "case 1\n";
break;
case 2:
cout << "case 2\n";
break;
case 4:
cout << "case 4\n";
break;
case 5:
case 6:
cout << "case 5 or case 6\n";
break;
default:
cout << "defualt 1\n";
}
return 0;
}
typedef
typedef W_CHAR unsined short; //W_CHAR型が「符号なし単精度整数」であることを宣言
W_CHAR kanjiChar; // W_CHAR型でkanjiCharを宣言
unionstructによく似ているが、メンバが幾つあってもメモリーに確保されるはオブジェクトは共通したポインタを持っているので一つの場所だけである。
union Word_obj {
struct INTL_WORD {
unsigned char evn; // 偶数
unsigned char odd; // 奇数
}
struct MOT_WORD {
unsigned char odd; // 奇数
unsigned char evn; // 偶数
}
unsigned short WordAccess;
};
のようなコードを記述するとメンバのstruct INTL_WORD, struct MOT_WORD, unsigned short WordAccessのそれぞれを指すアドレスは全て同じとなる。
unsignedunsigned char *strings;
voidvolatilevolatileに対してstatic静的変数がある。volatile int intaguage;
while条件式がブロック開始にあるので、条件によっては繰り返しブロック内を1度も実行しないことがあるのがdoで始まる制御と違うところ。
#include <stdio.h>
int main()
{
// printing countdown number.
int i=10;
while( i-- ) printf("%d\n", i);
return 0;
}
asmcatchtryブロックの中でthrowで発信されたメッセージの受信。class生成子
データの抽象化で、プログラムの集まりをクラスという。
例で言うならば、お饅頭を馬の糞に摩り替えることが出来ないようにするってことか(?!)。
クラスのオブジェクトを初期化する。
使い方はC言語のstructに似ているが、structとは違ってclassは一部の構造メンバをpublic以外の部分を非公開にすることができる。
これは、インスタンスやメソッドといった、プログラムの集まりをクラスといって、C言語のデータ構造として表現したもので、structでメンバ変数とよんでいたものがインスタンス変数、メンバ関数と呼ばれていたものがメソッドと名前をかえただけのようにも見えなくはない。
class ClassName {
// private objects
int i,j,k;
public:
// public objects
int function(int arg1, int arg2);
int strlenfunc( char *str );
}
deletenewで動的に作ったオブジェクトを削除。deleteというキーワードを設けた。
friendinlinenewdeleteで確保したオブジェクトを削除すること。operatoroverloadprivateclassの非公開部分の宣言protectedclassの非公開部分の宣言publicclassの公開部分の宣言structによく似ているようだ。protected或いはprivateにできるだけ宣言するのがお作法。templatethisthisポインタ。
メンバ関数の暗黙の引数。
プログラムの例は実行を目的としていない不完全なものです。
#define STACK_DEEP 256
class MyStack {
int count;
char data[STACK_DEEP];
public:
mystack(){ count=0; } // デフォルトのコンストラクタ
int pop();
int push();
}
MyStack::pop() // thisポインタは暗黙で、この関数に渡されます。
{
if( this->count > 0) // this->countはメンバのchar count[]を参照していることになります。
return this->data[--(this->count)];
else return 0;
}
throwtryブロックの中でメッセージを発信する。catchがメッセージを受け取る。trythrowでメッセージを発信して、catchがメッセージを受け取る。virtualandand_eqbitandbitorboolbool型の変数は、falseとtrueのいづれかを保持する。enum列挙型を定義するのが一般的であるが、TRUEとFALSEのとり得る値において、値の定義がプログラマの気分に依存するといった問題があった。bool型変数の長さについては、二つの値を保持できる長さ分だけあればよい(たとえば1ビット長など)ことになっているので、int型とは異なる扱いにするべきであるが、実際にbool型の長さがどれくらいもっているかは、処理系の実装に依存する。
complconst_castdynamic_castexplicitexportfalsebool型においてとりえる値で、偽値であるmutablenamespacenotnot_eqoror_eqreinterpret_caststatic_casttruebool型においてとりえる値で、真値であるtypeidtypenameusingusingが設けられた。
#include <iostream>
using namespace std;
wchar_txorxor_eq著作権1996年,1996年,1998年,1999年,2000年,2004年,2005年 © 大槻昌弥
著作者に無断で雑誌やBBS等の掲載や転載及び複製物の配布や販売などの営利目的へ利用する事を固く禁ずる。
ただし営利活動を目的としない個人的利用のため、このファイルを複製することにはいっこうに構わない。