次 - みる会図書館


検索対象: C++基礎講座
376件見つかりました。

1. C++基礎講座

第 1 章 C 十十の概要 21 1.12 2 次方程式の根の演算 では、次に示す 2 次方程式の根を演算するプログラムを書いてみま し リ = 0 工 2 十十 c この 2 次方程式の根は、次のようになります。 ーし十わ 2 ー 4 佖 c 2 佖 ェ 1 わ 2 ー 4 佖 c 20 この方程式は、係数 a が 0 の場合は 2 次方程式ではなくなります。このよ うな場合、その方程式を線形 (linear) 方程式と呼びます。この公式は、線形 方程式の根を求めるためには使えません。線形方程式にこの公式を使うと、「 0 による除算 (division-by-zero) 」のエラーとなって、プログラムは異常終了 してしまいます。 もし、次の式の値が負の数であれば、この方程式の根は複素数となります。 ー 4 佖 c この場合には、根は求められません。 この例題はちょっと数学的過ぎるようですが、心配はありません。本書は、 こでは、単にこの公 2 次方程式の数学的側面に焦点を当てるものではなく、 式を使って、 2 次方程式の根を求めることにします。 この 2 次方程式の根を求めるプログラムは、文字列を 2 行出力すること以 上のことを行うので、前に例に挙げたプログラムよりも若干複雑になります。 2 次方程式の根を求めるプログラムは、ユーサーが入力したデータを 3 つ読み 込み、 2 次方程式の根を演算し、そして根を出力します。プログラムは、入力 が終わるまでこの一連の動作を繰り返します。 このプログラムを C 十十で完全に書く前に、プログラムの表記法と自殀 語を一緒に使って、そのプログラムが何をするかを、おおまかに書いてみま しよう。この 2 次方程式の根を求めるプログラムは、自然言語を使えは次のよ ェ 2 ー

2. C++基礎講座

第 1 章 C 十十の概要 27 最初の 2 つの式は、単純に出力をモニターに書き込むものです。ストリー ムの cout と同様に、エラーストリーム cerr にはモニターが割り当てられて います。出力リダイレクション (output redirection) と呼ばれる機能を使う と、これら 2 つのストリームを、異なったファイルや同じファイルに結び付 けられますが、 MS-DOS ではストリーム cout しかファイルと結び付けられ ません。出力リダイレクションを使うと、エラーメッセージを cerr に書き込 み、通常の出力を cout に書き込むようにして、 2 種類の出力と区別させるこ とができます。この出力リダイレクションについても、後で解説します。 プログラムでは、さらに次の continue 文が続きます。 C011ti11Ue ; これによって、プログラムはループ本体でその後に続く文をスキップし、 ループ ( この場合 while ループ ) 内部での次の繰り返し ( ループ本体の実行 ) を継続します。 2 番目の if 文は、 2 次方程式の根が、複素数か実数かを判断します。「式が 真のときの選択肢」で示した if 文の本体は、条件式が真である場合にだけ実 この値を、次のようにして変数 tmp に代入します。 b*b ー 4*a*c この式では、ます最初に次の式の値を演算します。 (tmp = b*b ー 4*a*c) く 0 行されます。それは、次の式が真の場合です。 tmp = b*b ー 4*a*c この場合、式の値が変数 tmp の値になります。そして、 に 0 と比較します。 (tmp = b*b ー 4*a*c) く 0 この値を次のよう もし値が 0 以下ならは、 if 文の条件式は真となります。それは、 2 次方程式

3. C++基礎講座

20 第 1 章 C 十十の概要 または、次のように簡単に入力しても実行できます。 C>he110 その結果、プログラムは次のように出力します。 He110 Programmer ! WeIcome to the Wor1d of C + + ! UNIX システムでは、 C 十十のソースファイルには、普通はサフィックス ". c" を付けます。コマンド CC によって C 十十コンパイラを起動する場合は、 次のコマンドによって、ファイル he110. c をコンパイルしてリンクできます。 % CC he110. c GNU C 十十や SUN C 十十の場合には、 CC の代わりにそれぞれ g 十十や cc を使います。 この処理の結果、 a. out という名前の実行ファイルが作られます。このファ イルは、次のように入力して実行します。 % a. out もちろん、実行ファイルの名前は、デフォルトの a. out ではなく、覚えや すい名前にもできます。例えば、次のようにオプションの一 o を指定すると、 C 十十コンパイラは hello という名前の実行ファイルを作ります。 % CC ー 0 he110 he110. c この場合には、次のように入力してプログラムを実行します。 % 五 e110

4. C++基礎講座

第 10 章オーバーロード 273 class T { publ ic : T operator + (T) ; a と b が T 型の変数であるとすると、演算子、、 T::operator 十 " を、次の ようにして実行できます。 a ・ operator + (b) または、次のようにも実行できます。 a + b 義される場合の正確な呼び出し方法です。 後者の呼び出しは、演算子、、十 " がフレンド関数を使って、次のように定 T operator + (), T) ; 普通の関数を使う場合には、次のようになります。 friend T operator + (), T) ; public : class T {

5. C++基礎講座

160 第 7 章配列、構造体、ポインタ 整数 i を T 型のオプジェクトを指すポインタ p に加えるということは、 p に値 i*sizeof(T) を加えることです。つまり、加えられる値は、 T 型のオプ ジェクト i が占めるバイト数です。 T 型のオプジェクト i が占める空間ではな く、整数値 i を加えるためには、例えは次のようにして、型キャストを使わな ければなりません * 3 。 同様に、 T 型のオプジェクトを指すポインタ p から、整数 i を減しるという ことは、 p から値 i*sizeof(T) を減じることです。 例えば、 q から p を引くというように、あるポインタから他のポインタを減 じる場合には、例えは両者とも同し T 型であれは、その結果は、メモリ上で p と q の間に入れられる T 型の要素の数となります。この結果は、 sizeof(T) をそれに掛けれは、バイトに変換できます。 7.3.7 リストに見るポインタの使用例 プログラミングで使われるデータ構造のうち、リストは、おそらく配列の次 に重要なデータ構造でしよう。リストは、相互に結びついた 1 つ以上の要素か らなります。各リストの要素は、データを保持するほかに、次の要素のある場 所の指定、つまり次の要素のアドレスを指定します。 こで、情報を記憶するためのデータメンバと、リスト内の次の要素を 指すポインタを持つ list 型を定義して、リストを実装してみます。ヌルポ インタ値はリストの終わりを示します。ここで示すようなリストを一方向 (singly-linked) リストと呼びます。なぜならは、 1 つのリスト要素から次の 要素の間に、 1 つのポインタ ( リンク ) があるからです。リストは、このポイ ンタを使って、 1 つの方向に進めます。つまり特定のリスト要素から次の要素 へは進めますが、前の要素には戻れません。 もう 1 つの双方向 (doubly-linked) リストでは、次の要素に対して進んだ り、前の要素に戻ったりすることができます。双方向リストでは、次の要素と 前の要素のために、 2 つのポインタが必要です。 * 3 ( 訳注 ) MS-DOS などでは、ポインタ型と int 型は、同しようには扱えない場合があ ります。メモリモデルによってはポインタ型のサイズやアドレス表現が int 型と異なって いることがあるからです。

6. C++基礎講座

96 第 5 章文 ループ本体を完全には実行せすに、次のループの実行を継続するために c 。 ntinue 文を使ったプログラムの一部を次に示します。 if ( 式 ) { continue ; continue 文の実行は、 if の条件式の値に依存します。 continue 文が実行されると、そのまますぐに条件が試され、ループ本体の 次の実行が始められます。 continue 文が実行された場合にも条件が試される ため、ループ本体の次の実行は、条件が満たされないときには行われません。 5.6.3 goto 文 goto 文は、次の形式をとります。 goto 識別子 ; これは、文のラベルとして、「識別子」を持った文に制御を移すために使わ れます。空文を含めて、どの文でも、次のようにしてラベルを付けられます。 if (x くの { while (cin > > x) { int X ; goto 文の使い方を示すプログラムの例を、次に示します。 識別子 : 文

7. C++基礎講座

87 1 2 3 4 5 6 7 8 9 10 11 第 5 章文 Char action ; float amount ; long account ; switch (action) { case 'b' : balance(account) ; break; case case default : deposit (amount , account) ; break; withdraw ( amount , account ) ; break ; summary (account) ; break; error (account) ; この switch 文は、次のように実行されます。 1. char 型の値 ( 文字 ) を戻す、 switch 文の式 action か哥価される。 switch 文の書式は、次のようになります。 ル default の文が実行される。 3. switch の条件式の値がどの case ラベルにも一致しなかった場合には、ラベ 行が終わり、 switch 文の次からプログラムの実行が継続される。 は、次の章で解説する。次の文「 break; 」が実行されると、 switch 文の実 最初の文では、関数 deposit を呼び出している。この関数の詳細について deposit (amount , account) ; break ; お、文はセミコロンで終了するので、このコードは 2 つの文を含んでいる。 持った選択肢の文が実行される。この場合、次の 2 つの文が実行される。な れる。例えは、 action の値が文字「 ' d ' 」ならは、この文字「 ' d ' 」のラベルを 件式の値が case ラベルのどれかに一致した場合には、その選択肢が実行さ 2. case ラベルによって、 switch 文の各選択肢が指定されている。 switch の条 switch( 式 ){ ラ / ヾノレ 1 : ラーヾノレ : 文 1 ; 文 ; break ; break;

8. C++基礎講座

第 4 章演算子と式 59 に注意してください。 こでは、これらの演算子の使い方を示す、やや大きなプログラム例につい て見ることにしましよう。 次に示す 2 次方程式について考えてみます。 ー 6 十わ 2 ー 4 c よって求められます。 = 0 工十わ工十 c この 2 次方程式の根は、第 1 章「 C 十十の概要」で述べたように、次の式に 2 佖 わ 2 ー 4 佖 c 2 佖 これらの式を C 十十で書くと、次のようになります。 そして関数 sqrt を呼び出す。 1. 最初に平方根を求める。具体的には、ます関数 sqrt の引数を最初に評価し、 この C 十十の式は、次のようにして評価されます。 —b + sqrt (b*b—4*a*c) /2*a; のようになるでしよう。 これらの 2 組の括弧を使わないで、不正確にこの C 十十の式を書くと、次 ためのものです。 を使って部分式をまとめています。なお、関数 sqrt の括弧は関数呼び出しの しよう。これらは、決められた順序で式の評価を実行するために、 2 組の括弧 こで、さきはどの C 十十で書かれた 2 つの式の詳細について考えてみま 平方根を計算する、 C + 十の標準ライプラリ関数です。 a と b と c は float 型の浮動小数点変数です。また関数 sqrt は、その引数の

9. C++基礎講座

206 第 8 章クラス 8.4.9 メンバ関数 コンストラクタとデストラクタの両者以外のクラスのメンバ関数は、次のよ うに宣言されます。 結果の型関数名 ( 引数宣言 ) ; このプロトタイプは、クラス仕様の中で宣言されなけれはなりません。 8.4.10 演算子 結果の型関数名 ( 引数宣言 ) 自身の中でインラインで定義できます。 メンバ関数本体は、次の形式を使って、プロトタイプではなく、クラス仕様 この場合の T は、この演算子力嘱するクラスです。 結果の型 T: : 関数名 ( 引数宣言 ) これに対応するメンバ関数本体は、次の書式で定義します。 これに対応する演算子の定義本体は、次のような書式で書きます。 義するために使えます。 C 十十ですでに定義されている演算子記号だけが、新しいメンバ演算子を定 結果の型 operator 演算子記号 ( 引数 ) ; 指定される演算子のプロトタイプは、次の書式で宣言します。 メンバ演算子の定義は、メンバ関数の定義と似ています。クラス仕様の中で

10. C++基礎講座

第 2 章基本的な事項について 37 識別子 if はキーワードです。 C 十十のコンパイラは、キーワード if を発見 すると、次には if の条件文が続くはすだということがわかるので、次の処理 このプログラム文は、次のように実行されます。 を決定できます。ちなみに 1. x の元の値が 0 より小さければ、 x にその元の値の符号を反転した値を代入 する。 2. そうでなければ、何も実行しない。 2.3 定数リテラル値 C 十十では、次のようなさまざまな種類の定数リテラル値をプログラムの中 で表現できます。 1. 整数定数は、数字の単純な並びです。例えは、次のようなものが整数定数 ー 100 ー 31 0 44 です。 負の整数定数には、マイナス記号を前置します。 のは 16 進 (hex) 定数です。 も指定できます。 0 で始まるものは 8 進定数で、 0x または 0X で始まるも 定数は、 10 進数だけでなく 8 進数 (octal) や 16 進数 (hexadecimal) で ー 101L 33L を付け加えて指定します。 ます。倍精度整数定数は、次のように整数定数の後に文字の I ( または L) C 十十では非常に大きな定数を記述できます。これを倍精度整数定数と呼び