プログラミング入門

関数の書き方・分け方

はじめに 本当はもっときれいに書きたいけど処理が複雑になってくるとどうしても汚くなってしまう。関数が長くなりすぎて処理を分けたいんだけど複雑に絡まりあっていてもう手を入れられない。ということがあると思います関数の分け方というのは規則で機械的…

動的メモリ割り当て入門

ここでは malloc や new などの背後にある動的メモリ割り当ての仕組みについて説明しましょう はじめに この頃では初心者といえども STL のコンテナを使ったり new でオブジェクトを動的に確保するようなことはもう当たり前にやっていると思いますが、その仕…

C++プログラマのためのアセンブラ入門(続き)

(一記事のサイズ制限を越えてしまうようなので分割。前回の続き)情報処理の試験で使う casl 2 と comet 2 を実装してみましょう 実装例 #if defined( _MSC_VER ) // C4351 : 新しい動作: 配列 '%1' の要素は既定で初期化されます // C4917 : 'identifier' …

C++プログラマのためのアセンブラ入門

はじめに 新人さんといわず中堅くらいになったプログラマでもアセンブラがわからないという人が最近は多いようです 「ポインタがわからない」「マルチスレッドがわからない」というようなことも結局はアセンブラを理解していないところが大きいように思いま…

C++ コーディングの作法

ここではコーディング規約/コーディング標準(coding standards/coding guidelines/coding rules)の話をしましょう 既に明文化され公表されているコーディング規約は幾つもありますし、クライアントごとプロジェクトごとに従うべきコーディング規約というも…

C/C++ ポインタ入門

ポインタとは ポインタとはアドレスの入れ物です ただそれだけですおしまい ポインタとアドレス わかっていれば本当にそれでおしまいなのですが、ではそのアドレスというのは何かというと、アドレスというのはメモリ上の場所を表す値で、ただの整数です (実…

C/C++ 変数宣言の読み方入門

読み方のコツ 具体例 const の読み方 読み方のコツ 規則は単純です。この二点だけ押さえましょう: ポインタの* より 配列の[] や 関数の() の方が優先順位が高い 日本語の人は左から右へ読む。ただし () の中は後で読む英語の人は逆に変数名(一番内側の括…

浮動小数点数の詳細

文字列化する関数を書くんでもない限り別に知らなくてもいいんだけどfloat でも double でも別に指数部と仮数部のビット幅が違うだけでその解釈は同じです MSB.............................LSB S EXPONENT MANTISSA 符号 指数部 仮数部 浮動小数点数は基本…

C++ 基底クラスのアクセス指定子

private 継承や protected 継承がよくわからないということをよく聞きますクラスの継承というと is-a 関係だの is-implemented-in-terms-of 関係だのという言葉が出てきてしまうのが何となく難しそうに感じさせている一因だと思いますが、では本当に難しいこ…

コメント入門

今回はコメントについて学びましょうコメントは実行時の動作に影響を与えないので疎かにされがちですが、コメントは別に無駄に付いている機能ではありません コメントはプログラムのコードだけでは表せないプログラマの意図を表現するために存在するもので、…

拡張可能なインターフェイス

今回は拡張可能なインターフェイスというものについて考えてみましょう今 Fig.1 のような抽象基底クラスがあるとします Fig.1 struct ISamplePlugin : public ISampleUnknown { virtual void* DynamicCast( int classid ) = 0; virtual unsigned long AddRef…

dynamic_castを使わないRTTIの実装

RTTI は実行時型情報(RunTime Type Information)あるいは実行時型識別(RunTime Type Identification)と呼ばれる仕組みです C++でこれをサポートするための構文が dynamic_cast ですが、これはC++の言語に特有の機能ですからこれをそのままC言語などから…

RTTIの薦め

RTTI は実行時型情報(RunTime Type Information)あるいは実行時型識別(RunTime Type Identification)と呼ばれる仕組みです C++でこれをサポートするための構文が dynamic_cast です 今回はこのC++の dynamic_cast について復習しましょうまず Fig.1 を見…

コールバックの真価

前回、「関数のポインタ」を使って「コールバック」について考えてきましたが、「コールバック」は何も「関数のポインタ」でなければ実現できないわけではありません 今回は他の方法も見てみましょう そして「コールバック」の真価へと迫りましょう 関数オブ…

コールバックの薦め

「コールバック関数」ってよく聞きますよね 今回はその「コールバック」の使い方を覚えましょう その前に その前に、関数のポインタがなんだかわからないという人や、関数のポインタの宣言の仕方がわからないという人は C/C++ 変数宣言の読み方入門 や C/C++…

リファレンスカウンタの真価

さて、まずは前回の宿題への回答から行きましょう 前回の宿題は次の3つでしたね※1 それより、自分で設計する時にはこの例で使っている GetClassObjectみたいな仕様にしちゃダメですよ。これはただ例のために使ってるだけですからね。 どういったところが問…

テンプレートで楽をしよう

さて今回はいきなりですがまず Fig.1 を見てください Fig.1 struct IBaseObject { virtual void DeleteMe() = 0; virtual bool QuerySupport( OBJECT_CLASS_ID clsid ) = 0; virtual IBaseObject* GetClassObject( OBJECT_CLASS_ID clsid ) = 0; ・・・ }; s…

リファレンスカウンタの薦め

「リファレンスカウンタ」あるいは「参照カウンタ」は「そのインスタンスを参照(リファレンス)しているオブジェクトが幾つあるか」というカウンタです つまりオブジェクトのインスタンスの寿命を管理するものですFig.1 を見てください 実装はたったこれだ…

The ABC's of ABC

今回は「Abstract Base Class(抽象基底クラス)」についてお話しましょう「抽象基底クラス」とは「pure virtual function(純粋仮想関数)だけからなるクラス」のことです 「純粋仮想関数」というのは実装を持たない仮想関数のことです ここで言う「実装を…

CプログラマのためのC++オブジェクト指向入門

さて今回はC++と「オブジェクト指向」について簡単に話してみましょう 「オブジェクト指向」の話は難しそうだからと拒否反応を示す人もいるかもしれませんね。でも本当は全く難しいことなんてないんです その証拠に Fig.1 を見てくださいFig.1 FILE* fpi = f…