2006年01月21日

電子署名

デジタル文書の正当性を保証するために付けられる署名情報。文字や記号、マークなどを電子的に表現して署名行為を行なうこと全般を指す。現実の世界で行なわれる署名を電子的手段で代替したもの。特に、公開鍵暗号方式を応用して、文書の作成者を証明し、かつその文書が改竄されていないことを保証する署名方式のことを「デジタル署名」という。電子署名に法的効力を認めるかどうか、また、どの方式を電子署名として認めるかといった事項は、国によって異なる。アメリカなどでは州によっても異なる場合がある。
posted by シンビアン at 21:22| Comment(1) | TrackBack(0) | Forum Nokia | このブログの読者になる | 更新情報をチェックする

デジタル署名

デジタル文書の正当性を保証するために付けられる暗号化された署名情報。公開鍵暗号方式の応用によって、文書の作成者を証明し、かつその文書が改竄されていないことを保証する。署名者は、自身の秘密鍵を用いて暗号化した署名を文書に付加して送る。受取人は、署名者の公開鍵を用いて署名を復号し、正しい内容かどうか確認する。第三者による偽造防止の他、署名者がその文書を作成したことの証明にも用いることができるのが特徴。似た言葉に「電子署名」があるが、これは、文字や記号、マークなどを電子的に表現して署名行為を行なうこと全般を指す。デジタル署名は電子署名を実現する方式の一つであると言うことができる。
posted by シンビアン at 21:20| Comment(1) | TrackBack(0) | Forum Nokia | このブログの読者になる | 更新情報をチェックする

PKI 【公開鍵基盤】

公開鍵暗号を用いた技術・製品全般を指す言葉。RSAや楕円曲線暗号などの公開鍵暗号技術、SSLを組みこんだWebサーバ/ブラウザ、S/MIME・PGPなどを使った暗号化電子メール、デジタル証明書を発行する認証局(CA)構築サーバなどが含まれる。
posted by シンビアン at 21:13| Comment(1) | TrackBack(0) | Forum Nokia | このブログの読者になる | 更新情報をチェックする

Nokia6630 ノキア [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]

Nokia6630 ノキア [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]
posted by シンビアン at 15:04| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

X3 X-MEN 3 [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]

X3 X-MEN 3 [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]
posted by シンビアン at 15:02| Comment(0) | TrackBack(0) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

Underworld アンダーワールド [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]

Underworld アンダーワールド [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]
posted by シンビアン at 15:01| Comment(0) | TrackBack(0) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

Harry Potter ハリーポッター [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]

Harry Potter ハリーポッター [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]
posted by シンビアン at 14:59| Comment(0) | TrackBack(0) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

ガッチャマン [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]

ガッチャマン [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]
posted by シンビアン at 14:58| Comment(0) | TrackBack(0) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

Full Metal Panic フルメタルパニック [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]

Full Metal Panic フルメタルパニック [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]
posted by シンビアン at 14:55| Comment(1) | TrackBack(0) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

Chiken Little チキン・リトル [携帯電話 Vodafone 6630 Nokia 702NK テーマ Theme]

Chiken Little チキン・リトル [702NK テーマ Theme]

posted by シンビアン at 14:41| Comment(0) | TrackBack(0) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

Aeon Flux イーオン・フラックス [702NK テーマ Theme]

Aeon Flux イーオン・フラックス [702NK テーマ Theme]

posted by シンビアン at 14:39| Comment(0) | TrackBack(1) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

仮想関数

C++言語では仮想関数という特別なメソッドをクラスに持たせることが出来ます。これは,基本となるクラスで定義しておき,派生先のクラスでは同じメソッド名で別の処理を行わせるということを目的としています。もともとオブジェクト指向言語ではクラスはインスタンス化(newを使って作成)するというのが前提でしたが,C++ではそこらへんを曲げてみて,自動変数としても扱えるような使用になっています(実際多くのC++の参考書はそういった使い方をメインにしています)。しかし,オブジェクト指向的なプログラムはインスタンス化して初めて真価を発揮するのです。

例えば,他のコンピュータや器機と通信をするようなクラスを設計したとします。この際に汎用性を抑えていけば早く作成することが出来るかもしれませんが,通信相手が変わってしまった場合にはまた1から作りなおすか内部コードの一部を改造していくという羽目になるかと思います。しかし,ある基本となるクラスの設計(例えば文字を送信するときはこの関数を使用するなど)を行い,そのクラスを派生させることで,通信方法は派生先でさまざまだけれども,同じコードで相手と通信できるということも出来るようになります。これを上手に利用するには仮想関数が必要不可欠になってきます。

よく派生元のクラスのメソッドと同じ名前を定義するだけで仮想関数と同じような振る舞いをするという仮想関数と多重定義を間違えている事があります。次のサンプルコードはその実装の違いを示すものです。

class TFoo
{
protected:
int FValue;

public:
TFoo(){FValue=0;};

void ShowValue(){
ShowMessage(FValue);
}

void IncValue(){
FValue++;
}

virtual void VirtualIncValue(){
FValue++;
}
};

class TFooEx : public TFoo
{
public:

void IncValue(){
FValue+=2;
}

void VirtualIncValue(){
FValue+=2;
}
};

このコードでは基本となるクラスTFooからTFooExを派生させています。それぞれのクラスを実行してみると次のような結果が出てきます。

 まず,継承元のクラスを実行させる

// 継承元のクラスのメソッドを実行
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TFoo foo1,foo2;

foo1.IncValue();
foo2.VirtualIncValue();

ShowMessage("foo1="+foo1.Value() + ", foo2="+foo2.Value());
}

結果は foo1=1 , foo2=1と表示されます。

次に,派生先のクラスを実行させます。

// 派生先のクラスのメソッドを実行
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TFooEx foo1,foo2;

foo1.IncValue();
foo2.VirtualIncValue();

ShowMessage("foo1="+foo1.Value() + ", foo2="+foo2.Value());
}
結果は foo1=2 , foo2=2と表示されます。

 次にTFoo*にインスタンス化したクラスを実行してみます。

//---------------------------------------------------------------------------
// インスタンス化したクラスを実行
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TFoo *foo1=new TFooEx(),*foo2=new TFooEx();

foo1->IncValue();
foo2->VirtualIncValue();

ShowMessage("foo1="+foo1->Value() + ", foo2="+foo2->Value());

delete foo1,foo2;
}
結果は foo1=1 , foo2=2と表示されます。

違いがおわかりいただけましたでしょうか?インスタンス化させた場合には,virtualが付いているメソッドは派生先のメソッドが呼ばれ, virtualが付いていないメソッドは基本クラスのメソッドが呼ばれています。そうなるとなんでもかんでもvirtualを付ければよさそうになってきますが,そうすると派生先のクラスの自由度が奪われてしまうかもしれません。一番奇麗なコードはvirtualメソッドはprotected:に書きます。publicメソッドは出来るだけvirtualで定義してはいけません。

class TFoo
{
protected:
virtual void DoVirtualMethod();

public:
void VirtualMethod(){
DoVirtualMethod();
}
};

 少々冗長なコードになりますがしっかりとしたクラス設計をするにはこれが一番奇麗に書けると思っています(好みにもよりますが)。

 最近はあまり業界標準という言葉を聞かなくなったMFCですが,MFCではこのようなオブジェクト志向的な要素が抜けているように思えます。OWL (Object Windows Liblary)とかを使ったことのある人の多くにMFCは汚いと言う人がいますが,私も同感です。
posted by シンビアン at 14:27| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

コールバック関数

callback function

 C言語およびC++言語などにおいて、関数呼び出しの際に、関数のアドレスをパラメータとして渡すことで、呼び出した関数から自身の提供する関数を呼び出すようにすることがある。この際の呼び出した関数から実行される関数をコールバック関数と呼ぶ。

 C/C++言語だけでなく実行モジュールのアドレスをパラメータとして渡すことのできる言語なら同様のコールバック処理が実現できる。Windowsでは、ウィンドウを生成する際にウィンドウに発生するイベントをアプリケーションに伝えるためのコールバック関数(WinProc関数)を指定する。
posted by シンビアン at 13:39| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

コールバック関数

コールバック関数を使うときにはWindowsに呼び出してもらいたい関数(コールバック関数)のアドレスを指定して関数をコールします。そうする事によって、Windowsが指定されたこちらの中の関数を呼び出してくれます。しかも、こちらが要求する情報がなくなるまで(中断もしようと思えば出来ますが)ひたすら呼んでくれます。コールバック関数を通してこちらが受け取る情報をどう扱うかは、プログラマの勝手です(^^)。とにかく、「プログラムが」ではなく、「Windowsが」プログラムの中の関数を呼び出すのです。これがコールバック関数と言われる所以です。たとえてみれば、「ここの住所に情報を届けておいてね。届いたら(そこに居るやつが)処理をするからどんどん届けてね」とやるわけです。
posted by シンビアン at 13:33| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

コールバック関数

まず、「call back」という単語を英和辞典で調べると、「(電話を)後で掛け返す。」とでていました。電話でのコールバックは、相手先にダイヤルして、通じれば、自分の電話番号を伝えて電話を切り、相手方から電話の掛かってくるのを待つことをいいますが、コールバック関数も同じように、ある関数に、コールバックしてもらう関数を教えて、関数が呼び出されるのを待つことをです。

#include

/* コールバック関数 */

typedef int (*TEST_CALLBACK)(int i); /* コールバック関数のかたち */

int test_a(int mode,TEST_CALLBACK b)
{
static TEST_CALLBACK a=NULL;
int rc;

if(mode==1) { /* コールバックする関数を設定 */
a=b;
return 0;
}
if(a==NULL) {
printf("コールバック関数が設定されていません");
return 0;
}
rc=a(1); /* test_b()を呼び出す */
printf("test_a() rc=%d\n",rc);

return 0;
}

int test_b(int i)
{
printf("test_b() i=%d\n",i+100);
return i+200;
}

int main(void)
{
test_a(0,NULL); /* コールバック関数を設定しないで呼び出す */
test_a(1,test_b); /* コールバック関数を設定する */
test_a(0,NULL); /* ここから呼び出しても面白くないが、テストのため */
return 0;
}

typedefでコールバックする関数のポインタを宣言します。サンプルプログラムのなかでは
  typedef int (*TEST_CALLBACK)(int i);
と、しています。
test_b()関数はコールバックされる関数です。test_a()関数はコールバック関数を呼び出す関数ですが、サンプルのプログラムでは単純に、コールバック関数のポインタを事前に記憶させておき、コールバック関数を呼び出します。実際のプログラムでは、呼び出すタイミングがキー入力であったりとか、割り込みが起きたときとか、処理の途中経過を教えるものだったりとかになると思います。
posted by シンビアン at 13:30| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

ステルスコールバック

コールバックの際にISDNの発信者番号通知機能を用いることで、通常のコールバック機能では必要な着信後のホストの認証を省略してコールバックする機能。通常のコールバックで必要なユーザ側の課金を省略することができる。

 ステルスコールバックを行なう際は、まず、通常のコールバックと同じようにホストに対して発信を行なう。このとき、ホストは着信拒否を行ない、番号通知によって得られたユーザの電話番号宛にダイヤルアップを行ない、コールバック接続される。ユーザ側はホスト側に一度も着信しない(コールするだけ)ため、ユーザ側に一切課金されることなくコールバックを行なうことができる。

 ステルスコールバックはメーカーにより「無課金コールバック」などと呼ばれることもあるが、基本的な機能は同一である。しかし、ステルスコールバックの規格は各社ごとにまちまちで統一されていない。このため、ステルスコールバックを行なうためにはホストが用いているTAと同じメーカー、同じ機種のTAを用いなければならないなどの制約が生じる。
posted by シンビアン at 13:26| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

コールバック

電話回線などによる通信において、いったん通信先を呼び出し、相手側からの発信を求めること。

 通信料金は相手側が負担することになるため、企業の従業員が業務で社内ネットワークにダイヤルアップ接続する場合に用いられる。実際には、あらかじめ設定を行なうことにより、一連のコールバック手続きを自動で行わせる。

 コールバックの具体的な手続きについては数種類あり、通信元からの最初の呼び出しに際して若干の通信料金が必要な方式(実際に接続してすぐに切断する方式)と、最初の呼び出しに通信料金がかからない方式(無課金方式)に大別される。

 課金を要する方式については、Windows NTに搭載されているMS-CBCP方式が事実上の標準となっているが、無課金方式に関しては規格が乱立している状態で、通信元と通信先で対応している規格が異なる場合は無課金でのコールバックはできない(実際につながなければならない)。

 他に、同じ区間の通信を行なう場合でも発信地によって通信料金が異なることを利用して、通話料を安くするコールバックサービスもある。特に、この格差の大きい国際電話においては、コールバックによって通信料金が安い国から発信を行なうよう調整することで、料金を低く抑えることができる。
posted by シンビアン at 13:25| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

ハーネスとは

簡単にいうと「ゲーム基板とコントロールボックスの間で電源・映像・サウンド・操作などの信号を伝達するためのケーブル」ということになります。アーケードゲームにはなくてはならない重要な役割を果たしています。
posted by シンビアン at 13:19| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

誰が確保、解放するのか不明確なポインタメンバ変数を持つ

深刻度:★★★ - 重い深刻度

[症状]

不定値のポインタにより,メモリ破壊やメモリリークを引き起こしやすくなり,しかも原因が特定しにくく,バグを取るのに苦労をします。最初はうまく行っても,プログラムの変更でバグを誘発しやすくなります。

[原因]

ポインタの確保と解放に関する挙動をどうするか深く考えずにプログラムを作っていたなど。

[対策/予防]

コンストラクタでポインタメンバ変数をNULLに初期化するか,最初から意味のある値をセットしておくとよいでしょう。また確保と解放はクラスの外部ではなく,クラスの内部の責任とし,デストラクタで確実に解放するようにしましょう。

[例外]

なし。

[備考]

ポインタ関連のバグはあい変わらずC++でも,おなじみのものです。ただしC++では,メンバ変数がポインタであったとしても,コンストラクタで不定値でなくするようにし,デストラクタで明確に解放するという,ちょっとした注意を払うだけで,わりあい簡単に対処できるはずです。(が,そうアドバイスしても,できないと頭をかかえる人はいるんですがね。:-P)
posted by シンビアン at 12:43| Comment(0) | TrackBack(1) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

API

Application Program Interface

 アプリケーションプログラムインターフェイス。

 APIは、OSがアプリケーションに対して公開しているプログラムインターフェイスで、アプリケーションは、基本的にすべての処理をこのAPIを経由して行なう。現在一般的なOSのAPIは関数の形式をとっており、アプリケーションからは、適当なパラメータ(引数)を指定して、APIの関数を呼び出す。
posted by シンビアン at 12:40| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

システムコール

system call

 OS(のカーネル部分)が提供する機能のうち、プロセスから呼び出せるようになっている機能、もしくはその呼び出し規約のこと。ファイルアクセスやメモリの割り当て、子プロセスの生成などの機能が用意されていることが多い。

 最近のOSでは、システムコールではなく、API(Application Program Interface)という用語を使うことが多い。これは、OSのバージョンアップなどによって、従来はカーネルが提供していた機能がライブラリや別プロセスによって提供されるようになるなど、実装方法が多様化していることに対応したものである。
posted by シンビアン at 12:39| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

setjmp


文法:

#include
int setjmp( jmp_buf 環境バッファ );

setjmp()関数はlongjmp()を実行するために、システムのスタック情報を環境バッファ に保存する関数である。最初にsetjmp()を実行するときには返値はゼロである。その後、longjmp()が呼ばれた場合には、longjmp()の2番目の引数がsetjmp()の返値として返される。longjmp()の説明も参照のこと。
関連トピック:
longjmp()
posted by シンビアン at 12:38| Comment(0) | TrackBack(1) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

longjmp

文法:

#include
void longjmp( jmp_buf 環境バッファ, int 状態 );

longjmp()は最後にsetjmp()が呼ばれた位置のコードから実行を開始する。環境バッファ はsetjmp() を呼んだときにセットされる。状態 はsetjmp()の返値になり、どこのlongjump()から飛んできたのかを判断するために使用することができる。状態 はゼロに設定してはならない。
関連トピック:
setjmp()
posted by シンビアン at 12:37| Comment(0) | TrackBack(1) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

setjump(), longjump() はCの言語体系

前投稿にもlongjump とあって、何の事か解りませんでしたが、C言語の関数なんですね。

setjump()で戻り箇所を設定して、longjump()で先程設定したsetjump()へ戻る。
この際、サブルーチンの壁を超えて一気に戻れる。
posted by シンビアン at 12:35| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

setjump(), longjump()

setjump(), longjump() はCの言語体系で正式に使用が認められている。
Cで goto を使うには一つの関数内でなければならないが、longjump() はこれより酷い振る舞い
をする。

つまり、 goto の使用を非難するならば、 longjump() はそれ以上に非難されなければ
ならない。
posted by シンビアン at 12:34| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

C++で書ける! 携帯電話用OS Symbian OSプログラミング

Symbian固有の内容というのは、具体的にSymbian OSの主な基本型(charはTInt8など)、クラスの命名規約(スタックヒープに割り当てられるクラスはTで始める(前述のTInt8も同様)、CBaseクラスから派生し、ヒープに割り当てられるクラスはCではじめる、など)、例外キャッチのトラップハーネス(記事にもあるが、Cのsetjump()/longjump()に似ている)、リーブとクリーンアップ・スタックを併用することによる資源の解放忘れの防止といったところである。なお、資源の解放忘れといった場合、プログラミング上の不注意で発生するというより、むしろ、たとえばアプリケーションが途中で例外をスローして異常終了するようなとき(資源に限りがあるので、たとえば、メモリのアロケーションができないなんてことも(PC上で動作するアプリケーションに比べて)よく発生しうる)に、いかにつかんでいる資源を解放し、スタックの状態を元に戻すのか、といった感じである。
posted by シンビアン at 12:28| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

C言語の制御構造

continue ;

 単語の意味は「継続する」という意味ですが、C言語で使われるときはほんのすこしニュアンスが異なります。次の例をよ〜くみてください。^^;

int count = 100 ;

while( count > 0 )
{
if( ある条件が真 )
continue;    // continueに出会うとループの先頭(whileの位置)に戻ってしまう
else
printf("Hello World!!\n");

--count ;      // count の値を1減算する。
}

 どうです。解りますか? これは、ある条件が真のときには、continueを実行するのですが、そのときには"Hello world!!"の表示もされないしcountの値も減算されないまま、ループ(繰り返し構造)の先頭まで戻ってしまうのですね。

continue; は途中でループの先頭に制御を戻す役割を果たす。対象はwhile,do〜while,for

return ;

 return文は、制御を自分の所属する関数の呼び出し元に戻ります。このときになにか値を返すことも出来ます。返すことの出来る値は一つだけです。次の例を見て下さい。

int sample( void ) ; // プロトタイプ宣言
int ans ; // 結果を受ける変数

ans = sample() ; // 関数sample()を呼び出している。ansに値を受け取る

int sample( void )  // 呼び出される側の関数の実態
{
int count = 100 ;

while( count > 0 )
{
if( ある条件が真 )
return count ; // return( count ) ;でも可だが、この書き方はエラーになりやすい。
else
printf("Hello World!!\n");

--count ;      // count の値を1減算する。
}
}

 先ほどのcontinueの代わりにreturn文が書かれていますね。しかもこのreturnはcountの値も返しています。従って呼び出し側では、この値を受け取ることになります。

使わなくても良いgoto

 gotoを使って同じ関数中にあるラベルの行までジャンプ(制御を任す)することができます。正しくプログラムのシナリオ(アルゴリズム)を考えればまず使うことはないのです。安易に使うとレビューのときに先輩に小言を言われますよ〜。笑とりあえず例を挙げておきましょう。

void tfunc( void )
{


goto HELLO;


HELLO: printf("hello\n"); //ラベルは大文字で書く癖を付けましょう。
}

 とまあこんな具合です。ジャンプ先のラベルの後ろにはコロン':' を付けます。関数の中だけで有効というのがミソですね。他のエリアにジャンプしたい場合には、関数を使用して行うのが普通です。調べてみて下さい。
SEE ALSO setjump() 、longjump();
posted by シンビアン at 12:23| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

抽象クラス

抽象クラスは、インターフェイスと密接に関係しています。抽象クラスはインスタンス化できないクラスであり、多くの場合、部分的に実装されるか、またはまったく実装されません。抽象クラスとインターフェイスの主な違いの 1 つは、クラスが無制限の数のインターフェイスを実装できる一方で、1 つの抽象 (またはその他の種類の) クラスからしか継承できないことです。抽象クラスから派生したクラスも、インターフェイスを実装できます。抽象クラスは、いくつかのメソッドで一定レベルの機能を指定しながら、他のメソッドの実装はそのクラスの特定の実装が必要になるまで保留しておけるため、コンポーネントの作成時に便利です。また、派生クラスで追加の機能が必要になったときには、コードを変更せずに基本クラスに追加できるため、バージョン管理にも適しています。
posted by シンビアン at 12:16| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

具象クラス

実装を持たないクラス メンバは抽象メンバです。1 つ以上の抽象メンバを持つクラスは、それ自体が抽象クラスとなり、新しいインスタンスを作成できません。ランタイムに対応する言語の中には、抽象メンバを持たないクラスでも抽象クラスとしてマークできるものもあります。抽象クラスは、派生クラスが必要に応じて継承したりオーバーライドしたりできる基本的な一連の機能をカプセル化する必要がある場合に使用できます。抽象クラスでないクラスを具象クラスと呼びます。
posted by シンビアン at 12:14| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

配列へのポインタと配列へのリファレンス

C/C++ のあまり使われない機能に、配列へのポインタと配列へのリファレンスがあります。ここでは、それらがどのようなものかまとめたいと思います。

配列へのポインタ

C 言語には配列の先頭要素へのポインタとは別に配列へのポインタ が存在します。。プログラミング言語Cの 5.7 に多次元配列を受け取る関数の例が載っています。

次のプログラムではサイズ 256 の char 型の配列を作り、その配列へのポインタ p を作っています。++p を実行すると p の指すアドレスは 256 バイト分進みます。

#include
int main() {
char foo[256];
char (*p)[sizeof(foo)] = &foo;
printf("%p\n", p);
++p;
printf("%p\n", p); // 256 バイト分進む
return 0;
}

配列へのリファレンス

C++ には配列へのリファレンスがあります。通常、配列のデータを関数に渡すときはポインタと長さで渡したり、末尾に番兵を添えてポインタで渡したりしますが、C++ では配列へのリファレンスを使う方法もあります。

#include
int main() {
char foo[] = "abcdef";
char (&ref)[sizeof(foo)] = foo;
ref[0] = 'A';
printf("%s\n", foo); // "Abcdef" が表示される
printf("%d\n", sizeof(ref)); // これは 7
return 0;
}

どちらの機能も使う機会はそれほどなさそうですが、覚えておくといざというときに役立つかもしれません。これは万能の言い訳、「覚えておくといざというときに役立つかもしれない、という口実で雑多な知識を吸収してしまう」の法則という気もします
posted by シンビアン at 12:02| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

Effective C++ 改訂2版

「ポインタへのポインタ」は「ポインタへのリファレンス」にした方が C++ 的。C は何でもマクロ、ポインタ、構造体、配列、関数で解決する言語ということもできる。
posted by シンビアン at 11:58| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

ミックスイン

親クラスによってパラメーター化されたクラス
posted by シンビアン at 11:02| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

多重継承

より複雑な継承
継承は一段階にとどまりません
ある基本クラスから派生したクラスを基本クラスとして
さらにそこから派生クラスを生成するといった多段階継承が可能です

串のように、断層的に継承した場合、コンストラクタはもっとも最下層の基本クラスから実行され
デストラクタはその逆、最終的な派生クラスのものから実行されます
このとき、派生クラスの基本クラスが継承している基本クラスを間接基本クラスと呼びます

間接基本クラス
|
基本クラス
|
派生クラス

上の図は派生クラスから見た関係図です
派生クラスは上の二つのクラスの機能を全て継承しています

#include
using namespace std;

class Neko {
public:
Neko() { cout << "A house cat\n"; }
};

class Kitty : public Neko {
public:
Kitty() { cout << "Kitty on your lap\n"; }
};

class Zoo : public Kitty {
public:
Zoo() { cout << "Nekoneko Zoo\n"; }
} obj ;

int main() {
return 0;
}

結果は次のようになりました

A house cat
Kitty on your lap
Nekoneko Zoo

コンストラクタが、最初の基本クラスから開始していることがわかります
上のプログラムはコンストラクタの実験のみですが、派生クラス Zoo は
Kitty と Neko クラスの公開メンバ(及び破保護)を継承します

上の場合は直列的継承ですが
一つの派生クラスが複数の基本クラスを持つ並列的継承も可能です
このような、一つのクラスが複数のクラスを継承することを多重継承と呼びます

基本クラス1 基本クラス2
| |
派生クラス

派生クラスは二つの基本クラスの機能を同時に継承します
この場合、継承する時の構文は次のように記述します

class derived : type base1 , type base2 , ... {

typeにはアクセス指定子を指定します
この場合、コンストラクタは左の基本クラスから順に実行されます
上の場合、base1 , base2 , derived の順でコンストラクタが実行されます
デストラクタは、これの逆の順番で実行されます

#include
using namespace std;

class Neko {
public:
Neko() { cout << "A house cat\n"; }
};

class Kitty {
public:
Kitty() { cout << "Kitty on your lap\n"; }
};

class Zoo : public Kitty , public Neko {
public:
Zoo() { cout << "Nekoneko Zoo\n"; }
} obj ;

int main() {
return 0;
}

これを実行すると、次のようになりました

Kitty on your lap
A house cat
Nekoneko Zoo

基本クラスの指定順でコンストラクタが実行されています

また、派生クラスから基本クラスのコンストラクタに引数を渡すには
派生クラスのコンストラクタで次のような構文を使用します

derived(arg) : base1(arg) , base2(arg) , ... {

argは引数リストです
これも、派生クラスから基本クラスのコンストラクタ呼び出しさえ理解していれば問題ないですね
引数を渡したいコンストラクタが複数あれば、カンマで区切って渡すだけです

#include
using namespace std;

class Neko {
public:
Neko(char *str) { cout << str; }
};

class Kitty {
public:
Kitty(char *str) { cout << str; }
};

class Zoo : public Kitty , public Neko {
public:
Zoo(char *base1 , char *base2) : Kitty(base1) , Neko(base2) {
cout << "Nekoneko Zoo\n";
}
} obj("Kitty on your lap\n" , "A house cat\n") ;

int main() {
return 0;
}

このプログラムでは、基本クラスのコンストラクタに
派生クラスのコンストラクタから引数を渡しています
posted by シンビアン at 11:00| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

多重継承

multiple inheritance

 オブジェクト指向言語において、クラスを実装する際に、複数の基底クラスから継承を行なうことを、多重継承と呼ぶ。

 C++言語では多重継承が許されている。ただし多重継承を多用すると、同一の基底クラスを持つ異なる複数のクラスを継承するような場合に、継承関係があいまいになる場合があるので、多重継承を行なう際は注意が必要になる。それに対してJavaでは多重継承はサポートされていない。
posted by シンビアン at 10:58| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

Java訳語対照表

abrupt completion 中途完了
abstract declarator 抽象宣言子
abstract machine 抽象計算機
abstract semantics 抽象的意味
access アクセス
access control アクセス制御
accessible アクセス可能
action 動作
active position 現表示位置
active use 能動的使用
activity 活動
actual argument 実引数
actual function 実際の関数
additive expression 加減式
additive operator 加法演算子
address アドレス
address constant アドレス定数
address operator アドレス演算子
allocate 割り当てる
alphabet アルファベット
ambiguous member あいまいなメンバ
ambiguous name あいまい名
AND expression AND式
append 追加
argument 実引数
argument expression list 実引数式リスト
arithmetic constant expression 算術定数式
arithmetic type 算術型
array 配列
array component 配列の構成要素
array declarator 配列宣言子
array type 配列型
assign 代入する
assignable to 代入可能
assignment 代入,割当て
assignment compatible with 代入互換
assignment conversion 代入変換
assignment expression 代入式
assignment operator 代入演算子
associate 関連付ける
associative 結合的
atomic アトム的
automatic storage duration 自動記憶域期間
B
backslash character 逆スラッシュ文字
base 基数
basic character set 基本文字集合
basic type 基本型
behavior 振舞い
binary compatible バイナリ互換性
binary numeric promotion 二項数値昇格
binary operator 二項演算子
binary stream バイナリストリーム
bitwise logical AND operator ビット単位のAND演算子
bitwise operator ビット単位の演算子
block ブロック
block scope ブロック有効範囲
boolean 論理的,論理..又は 論理の
boolean equality operator 論理型等価演算子
boolean type 論理型
brace 波括弧
bracket 角括弧
break binary compatibility バイナリ互換性を損なう
break statement break文
broken-down-time 要素別の時刻
buffered バッファリングされた
bytecode バイトコード
C
call 呼出し
caller 呼出し側
calling environment 呼出し環境
capacity 容量
case independent 大文字小文字を区別しない
case label caseラベル
cast キャスト
cast expression キャスト式
cast operator キャスト演算子
casting conversion キャスト変換
category 分類
caught 捕捉される
character 文字
character constant 文字定数
character sequence 文字の並び
character set 文字集合
character string literal 単純文字列リテラル
character type 文字型
check 検査
checked exception 検査例外
class body クラス本体
class declaration クラス宣言
class instance クラスインスタンス
class method クラスメソッド
class modifier クラス修飾子
class of the object そのオブジェクトのクラス
class variable クラス変数
clean up クリアする
clear クリアする
cloning クローニング
close クローズする
code 符号
comma operator コンマ演算子
comment 注釈
common initial sequence 共通の先頭列
common type 共通の型
commutative 可換的
commutative operation 可換的演算
comparison operator 比較演算子
compatibility 互換性
compatible 互換の、互換性のある
compilation unit コンパイル単位
compile-time type コンパイル時の型
complete normally 正常完了
completion 完了
component 構成要素
component type 構成要素型
composite type 合成型
compound assignment 複合代入
compound statement 複合文
concatenate 連結する
concurrent 並行
condition 条件
conditional expression 条件式
conditional inclusion 条件付き取込み
conditional operator 条件演算子
conformance 適合性
conforming 適合する
conforming program 適合プログラム
consistent 一貫性
constant 定数
constant expression 定数式
constant field 定数フィールド
constraint 制約
constructor コンストラクタ
constructor parameter コンストラクタパラメタ
context 文脈
continue statement continue文
contract 取決め
control character 制御文字
control line 制御行
controlling constant expression 制御定数式
controlling expression 制御式
conversion 変換
conversion contexts 変換の文脈
conversion specification 変換指定
conversion specifier 変換指定子
copy 複写する
create 生成する
current 現
D
daemon デーモン
deallocate 解放する
decimal constant 10進定数
decimal digit 10進数字
decimal value 10進値
decimal-point character 小数点文字
declaration 宣言
declaration list 宣言並び
declaration specifier 宣言指定子列
declarator 宣言子
declarator type derivation 宣言子型派生
declare 宣言する
decrement デクリメント
default デフォルトの
default argument promotion デフォルト実引数拡張
default constructor デフォルトコンストラクタ
default label デフォルトラベル
default value デフォルト値
definitely assigned 確実に代入された
definition 定義
delimiter 区切り記号
denormalized 非正規化
denote 表す
design 設計
designate 指し示す
digit 数字
digit sequence 数字列
direct abstract declarator 直接抽象宣言子
direct declarator 直接宣言子
direct extension 直接的拡張
direct subclass 直接的サブクラス
direct subinterface 直接的サブインタフェース
direct superclass 直接的スーパクラス
direct superinterface 直接的スーパインタフェース
directive 指令
directly implement 直接的に実装する
directory ディレクトリ
disassociate 切り離す
discuss 記述する
discussion 記述
division operator 除算演算子
do statement do文
documentation comment 文書化注釈
domain error 定義域エラー
double-quote 二重引用符
dynamically enclosed 動的に囲まれる
E
edge 辺
element 要素
element type 要素型
ellipsis 省略記号
else group elseグループ
empty 空
empty statement 空文
end-of-file ファイルの終わり
end-of-file indicator ファイル終了表示子
enum specifier 列挙型指定子
enumerated type 列挙型
enumeration 列挙
enumeration constant 列挙定数
enumeration content 列挙内容
enumeration object 列挙オブジェクト
enumeration specifier 列挙指定子
enumeration tag 列挙タグ
enumerator 列挙子
enumerator list 列挙子並び
environment 環境
environment list 環境の並び
equality expression 等価式
equality operator 等価演算子
equivalent 等価な
error class エラークラス
error condition エラー状態
error indicator エラー表示子
error number エラー番号
escape sequence エスケープシーケンス
evaluate 評価する
event イベント
evolution 機能変更
exception 例外
exception class 例外クラス
exception handler 例外ハンドラ
exception parameter 例外パラメタ
exception-handler parameter 例外ハンドラパラメタ
exclusive OR expression XOR式
execution environment 実行環境
exit 抜け出す,抜出し
exponent 指数
exponent part 指数部
expression 式
expression name 式名
expression statement 式文
extended character set 拡張文字集合
extension 拡張
external declaration 外部宣言
external definition 外部定義
external identifier 外部識別子
external linkage 外部結合
external name 外部名
external object definition 外部オブジェクト定義
F
field フィールド
field declaration フィールド宣言
field width フィールド幅
file name ファイル名
file pointer ファイルポインタ
file position indicator ファイル位置表示子
file positioning ファイル位置付け
final (class) 最終(クラス)
finalizable 終了化可能
finalized 終了化
finalizer 終了化子
finalizer-reachable 終了化到達可能
flag フラグ
floating constant 浮動小数点定数
floating suffix 浮動小数点接尾語
floating type 浮動小数点型
floating-point number 浮動小数点数
floating-point type 浮動小数点型
flush フラッシュする
for statement for文
formal parameter 仮引数
format 書式
formatted input/output 書式付き入出力
forwarding method 転送メソッド
fractional constant 小数点定数
fractional part 小数部
free 解放する
freestanding execution environment フリースタンディング実行環境
full expression 完全式
fully buffered 完全バッファリングされた
function 関数
function body 関数本体
function call 関数呼出し
function declarator 関数宣言子
function definition 関数定義
function designator 関数指示子
function image 関数イメージ
function prototype 関数原型
function prototype scope 関数原型有効範囲
function scope 関数有効範囲
function type 関数型
function-call operator 関数呼出し演算子
G
garbage collection ガーベジコレクション
general purpose 一般用
generate 生成する
global 大域
goal symbol 目標記号
goto statement goto文
gradual underflow 緩やかなアンダフロー
group グループ
group part グループ構成要素
H
handle 取り扱う
header ヘッダ
header name へッダ名
hexadecimal constant 16進定数
hexadecimal digit 16進数字
hexadecimal escape sequence 16進拡張表記
hosted execution environment ホスト実行環境
I
identifier 識別子
identifier list 識別子並び
IEEE Standard for Binary Floating-Point Arithmetic 2進数浮動小数点計算のためのIEEE規格
if group ifグループ
if section if節
if statement if文
implement 実装する
implementation 処理系/実装
implementation limit 処理系限界
implementation-defined 処理系定義の
import declaration インポート宣言
inclusive OR expression OR式
incomplete type 不完全型
inconstant constant 不定の定数
increment インクリメント
indeterminate 不定の
index インデックス、指標
indicator 表示子
inexact 不正確
infinity 無限大
inherit 継承
init declarator 初期化宣言子
init declarator list 初期化宣言子並び
initial shift state 初期シフト状態
initial value 初期値
initialization 初期化
initialized 初期化
initializer 初期化子
initializer list 初期化子並び
input failure 入力誤り
input item 入力項目
input stream 入力ストリーム
input/output 入出力
instance method インスタンスメソッド
instance variable インスタンス変数
instanceof operator instanceof演算子
integer character constant 単純文字定数
integer constant 整数定数
integer literal 整数リテラル
integer suffix 整数接尾辞
integer type 整数型
integral constant expression 整数的な定数式
integral promotion 整数的な拡張
integral type 整数的な型
integrity 完全性
interface modifier インタフェース修飾子
internal identifier 内部識別子
internal linkage 内部結合
internal name 内部名
interrupt 割込み
invocation 呼出し
invoker 呼出し元
involve 含まれる
italic イタリック
iteration statement 繰返し文
J
Java Virtual Machine Java仮想計算機
Java Virtual Machine Specification Java仮想計算機規定
jump statement 分岐文
K
keyword キーワード
Korean (language) 朝鮮語(チョソノ)
L
label ラベル
label name ラベル名
labeled statement ラベル付き文
language 言語
late-bound 遅延束縛
"laziest" form of resolution ”もっとも怠慢な”形式の記号解決
left-associative 左結合
left-hand side 左辺
length 長さ
letter 英字
lexical element 字句要素
lexical grammar 字句文法
library ライブラリ
line 行
line buffered 行バッファリングされた
line number 行番号
linkage 結合
linking リンキング
literal リテラル
live thread ライブスレッド
load ロード
load factor 負荷係数
loading ローディング
local 局所
local variable 局所変数
local variable declaration statement 局所変数宣言文
locale 現地
locale-specific behavior 現地固有の振舞い
lock ロック
logical AND AND
logical AND expression AND式
logical OR OR
logical OR expression OR式
logical source line 論理ソース行
long suffix 長語接尾語
loop body ループ本体
loss of precision 精度の損失
lowercase letter 小文字
lparen 左括弧
lvalue 左辺値
M
main memory 主メモリ
master copy マスタコピー
matching failure 照合誤り
maximum priority 最高優先順位
member メンバ
member-access operator メンバアクセス演算子
meta- メタ
method メソッド
method body メソッド本体
method invocation conversion メソッド呼出し変換
method name メソッド名
method parameter メソッドパラメタ
minus sign 負符号
mode モード
modifiable lvalue 変更可能な左辺値
monetary formatting 金額の書式化
monitor モニタ
multiplication operator 乗算演算子
multiplicative expression 乗除式
multiplicative operator 乗除演算子
N
name collision 名前の衝突
name conflict 名前の競合
name space 名前空間
narrowing primitive conversion プリミティブ型の縮小変換
narrowing reference conversion 参照型の縮小変換
negation 否定
new-line 改行
new-line character 改行文字
no linkage 無結合
non-white-space character 非空白類文字
nondigit 非数字
nonterminal 非終端記号
nonzero digit 非ゼロ数字
normal completion 正常完了
null 空,null
null character 空文字
null literal 空リテラル
null pointer 空ポインタ
null pointer constant 空ポインタ定数
null statement 空文
null type 空型
numeric promotion 数値昇格
numeric type 数値型
numerical comparison operator 数値比較演算子
numerical equality operator 数値等価演算子
O
object オブジェクト
object equality オブジェクト等価演算
object type オブジェクト型
obsolescent feature 廃要素
octal constant 8進定数
octal digit 8進数字
octal escape sequence 8進拡張表記
offset オフセット
open オープンする
operand オペランド
operator 演算子
optional オプションの
optional symbol オプション記号
ordered 順序付ける
ordinary identifier 通常の識別子
output stream 出力ストリーム
overload オーバロード
override 上書き
P
package パッケージ
package declaration パッケージ宣言
padding 詰物
pair 対
parameter 仮引数
parameter declaration 仮引数宣言
parameter list 仮引数並び
parameter type list 仮引数型並び
parenthesis 括弧
passive use 受動的使用
path パス
performance 性能
period ピリオド
physical source line 物理ソース行
plus sign 正符号
point 指す
pointer ポインタ
pointers ポインタ
polar method 極手法
policy 方策,方式
poll ポーリング
polymorphically 多態に
postfix expression 後置式
pp number 前処理数
precedence 優先順位
precise 正確
precision 精度
predefined あらかじめ定義された
preparation 準備
primary 基本
primary expression 基本式
primitive constant プリミティブ定数
primitive type プリミティブ型
printing character 表示文字
priority 優先順位
process プロセス
processor time プロセッサ時問
program プログラム
program execution プログラムの実行
program name プログラム名
program parameter プログラムパラメタ
program startup プログラム開始処理
program termination プログラム終了処理
program text プログラムテキスト
promote 昇格する
property 属性
punctuator 区切り子
Q
qualified access 限定アクセス
qualified name 限定名
qualified type 限定型
qualified version 限定版
R
radix 基数
range error 値域エラー
reachable 到達可能
read 読取り
read error 読取りエラー
reason 理由
reclaim 再利用
recursive 再帰的
redefinition 再定義
reference equality operator 参照型等価演算子
reference type 参照型
referenced type 被参照型
references 参照
reflexive 反射性
relational expression 関係式
relational operator 関係演算子
remainder operator 剰余演算子
replacement list 置換要素並び
requirement 要件
rescan 再走査
reserved identifier 予約済み識別子
resolution 解決
resumed 再開
return statement return文
return type 返却値の型
return value 返却値
right-hand side 右辺
robust 頑健
root ルート
round to nearest 直近への丸め
round toward zero 0に向かう丸め
runtime 実行時
runtime exception class 実行時例外のクラス
S
same class 同一クラス
same interface 同一インタフェース
same type 同一型
scalar type スカラ型
scanlist 走査文字の並び
scanset 走査文字集合
scope 有効範囲
seed 生成源
selection statement 選択文
semantic rule 意味規則
separator character 分離文字
sequence 系列
sequence point 副作用完了点
set セットする
set state セット状態
shallow 浅い
shift distance シフト幅
shift expression シフト式
shift operator シフト演算子
side effect 副作用
sign 符号
signal シグナル
signal handler シグナル処理ルーチン
signal number シグナル番号
signature シグネチャ
signed integer type 符号付き整数型
significant part 有効数字部
simple assignment 単純代入
simple escape sequence 単純拡張表記
simple name 単純名
single-quote 一重引用符
single-type-import declaration 単一の型インポート宣言
source character set ソース文字集合
source file ソースファイル
source file inclusion ソースファイル取込み
space スペース
space character スペース文字
specification 規定
specifier 指定子
specifier qualifier list 型指定子型限定子並び
spelling つづり
standard error 標準エラー
standard exception class 標準例外クラス
standard input 標準入力
standard output 標準出力
state-dependent encoding 状態依存符号化
statement 文
statement label 文のラベル
statement list 文並び
static initializer 静的初期化子
static storage duration 静的記憶域期間
step 段階
storage duration 記憶域期間
storage-class specifier 記憶域クラス指定子
store 記憶する
stream ストリーム
string 文字列
string concatenation 文字列連結
string concatenation operator 文字列連結演算子
string conversion 文字列変換
string literal 文字列リテラル
strongly typed 強く型付けされた
subclass サブクラス
subexpression 副式
subinterface サブインタフェース
subject sequence 変換対象列
subscript 添字
subscript operator 添字演算子
substatement 副文
successful termination 成功終了
suffix 接尾語
superclass スーパクラス
superinterface スーパインタフェース
suppress 抑制する
suspended 一時停止
switch body スイッチ本体
switch statement switch文
symmetric 対称な
synchronizing 同期化する
syntactic grammar 構文文法
syntactic sugar 糖衣構文
syntax rule 構文規則
T
tag タグ
tagged paragraph タグ付き段落
temporary file 一時ファイル
terminating null character 終端空文字
terminating zero-valued code 終端0値コード
text stream テキストストリーム
this book, this manual この標準情報(TR)
thread スレッド
thrown 投げられる
token トークン
tokenizer トークン切出し器
transitive 推移性
translation environment 翻訳環境
translation limit 翻訳限界
translation phase 翻訳フェーズ
translation unit 翻訳単位
treatment 処置
trivial way 自明な方法
truncate 切り捨てる
type 型
type comparison operator 型比較演算子
type conversion 型変換
type definition 型定義
type name 型名
type qualifier 型限定子
type qualifier list 型限定子並び
type specifier 型指定子
type-import-on-demand declaration 要求時の型インポート宣言
typedef name 型定義名
U
unary expression 単項式
unary numeric promotion 単項数値昇格
unary operator 単項演算子
unbuffered バッファリングされていない
unchecked exceptions class 非検査例外クラス
undefined 未定義の
underflow アンダーフロー
underscore 下線
unfinalized 非終了化
Unicode Unicode
unique package name 一意なパッケージ名
unload アンロード
unlock ロック解除
unnamed 名前のない
unordered 順序付けしない
unqualified type 非限定型
unqualified version 非限定版
unreachable 到達不能
unsigned integer type 符号無し整数型
unsigned suffix 符号無し接尾語
unspecified 未規定の
unsuccessful termination 失敗終了
update stream 更新ストリーム
uppercase letter 大文字
use 使用
usual arithmetic conversion 通常の算術型変換
UTF length UTF長
utility ユーティリティ
V
value 値
variable argument 可変個実引数
variable initializer 変数初期化子
verification 検証
verifier 検証器
virtual machine 仮想計算機
void expression ボイド式
volatile object ボラタイルオブジェグト
W
wait set 待機集合
when false 偽の場合
when true 真の場合
while statement while文
white space 空白類
white-space character 空白類文字
widening primitive conversion プリミティブ型の拡大変換
widening reference conversion 参照型の拡大変換
width 幅
working copy 作業コピー
working memory 作業メモリ
wrapper object ラッパーオブジェクト
write 書込み
write error 書込みエラー
posted by シンビアン at 10:57| Comment(3) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

bit-wise copy

Addendum: Making sense of clone()
It is easy to get confused over this clone business. At the risk of adding to the confusion here are some points to help you think it through.

* This is all about constructing a truly independent copy of an object.
* When objects contain nothing but primitive data it is harmless to make a bit-wise copy of the object, i.e. just reproduce all the data in the object byte by byte.
* The eventual parent class of every class, Object, has a method, clone, that will produce such a bit-wise copy, so if you want to support a bit-wise copy method, you might as well use it, but there are two catches:
o When it runs, it checks to see if the class is declared as implements Clonable. To use it, you will have to declare your class that way, and,
o Just declaring that it implements the Clonable interface will not be enough. You will have to provide a clone method which calls super.clone() on the user's behalf. The model for this trampoline method is in the class Point as given above.
* When an object contains a reference to another object we need to take special care how we go about copying it. If we just copy the reference, then the first object and its copy will share the reference, and the two objects will not be truly independent. We should create a copy of the referenced object, like the Point object that is the origin of all our geometry classes, and use it when creating our copy of the original object.
* When providing a copy constructor as just described we could call it something other than clone, like copy, but that would go against the spirit of naming Java methods so as to convey their significance. If we call the copy constructor method clone we will have to declare the return type as Object and those who call it will have to cast the returned type to the actual class that defines it. However, we no longer need to declare the class as implements Cloneable since we are going to do the copying ourselves, and not just call super.clone().
posted by シンビアン at 10:55| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

セッション層

別名 : レイヤ5, 第5層

 OSI参照モデルの第5層に位置し、通信の開始時や終了時などに送受信するデータの形式などを規定したもの。

 この層で論理的な通信路が確立される。セッション層からアプリケーション層までの通信方式は単一のプロトコル(例えばHTTP)で定められていることが多い。
posted by シンビアン at 10:54| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

セッション

WWWにおけるアクセス数の単位の一つ。「ビジット」とも呼ばれる。Webサイトを訪れたユーザがサイト内で行なう一連の行動をまとめて1セッションという。同一のユーザが短時間の間に何ページ読み込もうと、セッションは1である。同一のユーザでも、ある程度間隔が開いた場合は、新しいセッションとしてカウントする。どのくらい開いたら新しい訪問とみなすかについてはいろいろな基準があるが、Web測定の代表的な企業であるInternet Profiles社が採用している30分が、事実上の業界標準となっている。
posted by シンビアン at 10:53| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

システムリソース

 Windowsで動作するアプリケーションソフトが共通して利用する、特殊なメモリ領域。

 USERリソースとGDIリソースの2つがあり、前者は、アプリケーション操作で開くダイアログやウィンドウなど、ユーザ操作のための情報を格納し、後者は、画面表示に使うフォントやビットマップ画像、アイコンなど、グラフィックス表示関係の情報を格納するのに使う。

 表示には、両者のうち少ないほうの残量を全体のパーセントで表し、これが0%になるとそれ以上アプリケーションやファイルを開くことはできない。

 システムによってあらかじめ容量が決まっており、いくらメモリを増設してもリソースの容量は増えないので注意が必要である。

 16ビットアプリケーションの使う領域と32ビットアプリケーションの使う領域は異なるが、前者の方が圧倒的に制限が厳しいため、残量を考える場合など、ほとんどの場合は前者を指す。

 Windows 3.1以降で確保されているシステムリソースの領域は、16ビットアプリケーション用が計384KB、32ビットアプリケーション用が計6MB(Windows 3.1では32ビット用は確保されていない)。

 システムリソースの不足は、16ビットアプリケーションが多数起動されることによって発生する。本体が32ビットで記述されたアプリケーションでも、アプリケーションが呼び出すライブラリ(DLL)が16ビットベースで記述されていれば、そのDLLが16ビット用リソースを使用するためにリソース不足を発生させてしまうことがある。

 アプリケーションが解放を忘れる(リソースリーク)と、アプリケーションが終了してもリソースは完全には回復しないため、アプリケーションの起動と終了を繰り返していると次第に使用可能なシステムリソースは減少してくる。解放されずに残った領域を使用可能にするためには再起動する必要がある。

 Windows 2000など、Windows NT系列にもシステムリソースの制限はある(NTでは「ヒープ領域」と呼ばれている)が、16ビット・32ビットアプリケーション共に計3MBの領域を使用するようになり、16ビットアプリケーション特有の制限を受けなくなった上に、レジストリ操作によって領域を拡大することもできることから、その制限を気にする必要はなくなっている。
posted by シンビアン at 10:51| Comment(0) | TrackBack(2) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

システムリソースの空きを増やすには?

以下の作業でシステムリソースの空きを増やすことが可能ですので、お困りの方は試してみてはいかがでしょうか?

* タスクトレイから常駐アイコンを減らす

タスクトレイには多くの常駐アイコンがセットされていますが、これらはリソースを消費しています。
それぞれ、以下の方法で常駐解除することができます。
キーボードインジケータ
1. コントロールパネルの「キーボード」を起動します。
2. [言語] タブをクリックし、「タスクバー上に状態を表示」のチェックを解除します。
スピーカー
1. コントロールパネルの「マルチメディア(サウンドとマルチメディア)」を起動します。
2. [オーディオ] タブの再生グループにある「音量の調節をタスクバーに表示する」のチェックを解除します。
Me の場合 [サウンド] タブの音量(V) グループにある「ボリュームコントロールをタスクバーに表示する」のチェックを解除します。
タスク
1. 「マイコンピュータ」から「タスク」を開きます。
Me の場合コントロールパネルから「タスク」を開きます。
2. タスクフォルダのメニューバーから [詳細設定]−[タスクスケジューラの使用停止] をクリックします。
モデム
1. 「マイコンピュータ」から「ダイアルアップネットワーク」を開きます。
Me の場合、[スタート]−[設定]−[ダイヤルアップ ネットワーク] をクリックします。
2. 接続アイコンを右クリックし、[プロパティ] をクリックします。
3. 「構成(設定)」ボタンをクリックします。
4. [オプション(オプション設定)] タブをクリックし、「モデム状態を表示(モデムの状態をウィンドウ表示する)」のチェックを解除します。
ディスプレイ
1. コントロールパネルの「画面」を起動します。
2. [設定] タブの「詳細」ボタンをクリックします。
3. [全般] タブの「タスクバーに設定インジケータを表示する」のチェックを解除します。
PC カード
1. コントロールパネルから「PC カード(PCMCIA)」を起動します。
2. [ソケットの状態] タブをクリックし、「タスクバー上に状態を表示」のチェックを解除します。
電源
1. コントロールパネルの「電源(電源オプション)」を起動します。
2. [詳細(詳細設定)] タブの「電源メーターをタスクバーに表示する(アイコンをタスクバーに常に表示する)」のチェックを解除します。
時計
1. [スタート]−[設定]−[タスクバーとスタートメニュー] をクリックします。
2. [タスクバーオプション(全般)] タブの「時計を表示」のチェックを解除します。

* システム起動時に自動起動されるプロセスを停止

Windows はシステムを起動する時に、レジストリの run や RunService キーに登録されたプログラムや、WIN.INI の load や run で指定されたプログラム、さらに「スタートアップ」フォルダに登録されたプログラムを自動起動します。これらの中にはリソースを消費するものがあるので、常駐させる必要の無いものは以下の作業で起動しないように設定します。(なお、この作業を行なう前にタスクトレイのアイコン常駐解除を行なった方が、作業は楽になります。)
1. [スタート]−[ファイル名を指定して実行] から MSConfig を起動します。
2. [スタートアップ] タブで起動しないものはチェックを解除して下さい。

主な項目のリストを添付しますので、停止する際の参考にしてください。(停止するとその機能は使えなくなります)
Windows 標準
internat キーボードインジケータ。複数の IME を切り替えない場合は不要。キーボードのプロパティで停止できます。
SystemTray タスクトレイ。止めないことを推奨。
ScanRegistry 起動時のレジストリバックアップ。止めてもリソースに影響しません。
TaskMonitor タスクモニター。デフラグ時に IALA を有効化できます。
関連 FAQ:デフラグトラブル
LoadPowerProfile Windows の省電力機能。
関連 FAQ: LoadPowerProfile が 2 つ起動されています
IrMon 赤外線モニター
ICSMGR インターネット接続共有機能
NetShow PowerPointHelper NetShow ユーティリティ
Hidserv USB キーボード、マウスサポート
参考リンク:再ログオンで USB キーボードの一部ホットキーが使用できない
Taskbar Display Controls 画面の設定。画面のプロパティで停止できます。
SchedulingAgent タスクスケジューラの特定タスク実行
CriticalUpdate Windows Update 重要な更新の通知
アプリケーションの追加と削除で削除を推奨
PCHealth Windows Me システムファイル保護/システムの復元
*StateMgr
SSDPSRV UPnP の SSDP サービス。
関連 FAQ:Windows Me で自動起動されている SSDPSRV って何?
StillImageMonitor スキャナとカメラ
マイクロソフト
ctfmon.exe IME 2002 がインストールする Internat の代替
Machine Debug Manager スクリプトデバッガ (デバッグしない場合は停止を推奨)
MSMSGS MSN Messenger サービス。Messenger のオプションで停止可能。
Loadqm MS Query Manager。MS との通信に使用。停止を推奨。
MSDTC マイクロソフト分散トランザクション制御
Fpx NetMeeting リモートデスクトップ共有
Load WebCheck Internet Explorer 同期タスク
TweakUI TweakUI (止めても復活します。)
Microdoft Office Startup MS Office 製品起動高速化プログラム (停止を推奨)
FindFast MS Office ファイル検索高速化プログラム (停止を推奨)
MOSearch MS Office 2000 以降のファイル検索高速化プログラム (停止を推奨)
Reminder MS Money リマインダー
デバイスドライバ、マルチメディア
AlpsPoint タッチパッドのスクロール、Webアシスト、ホットキーなどの追加機能
EM_EXEC Logitech マウスウェア (マウスの追加機能)
POINTER IntelliPoint ドライバ
gnetmous justy マウスドライバ (マウスの追加機能)
SynTPLpr タッチパッドドライバ
SynTPEnh
Mouse Suite 98 Deamon マウスの追加機能
PRPCMonitor Intel SpeedStep モニタ。止めるとバッテリー駆動時間が短くなります。
WebOutfitterTray Intel WebOutfitter (PIIIユーザー用マルチメディアサービス)
Promon.exe Intel Ethernet ドライバ
LTSMMSG ルーセントモデムドライバ
CountrySelection PC Tel モデム国選択プログラム
PCTVOICE PC Tel モデム音声サポート
YAMAHA DS-XG Launcher YAMAHA DS-XG ランチャー
SxgTkBar YAMAHA ソフトウェアシンセサイザー環境設定
vscvol88 Roland VSC-88 ボリュームコントロール
RealTray リアルプレイヤーツール、RealPalyer の設定で無効化可能
Shockwave init Shockwave 初期化プログラム。不要。
SoundFusion クリスタルサウンドドライバ
AudioHQ サウンドブラスター設定ツール
CTSysVol サウンドブラスター追加ボリュームコントロール
devldr16.exe サウンドブラスター DOS サポート。
SpeedRacer サウンドブラスター関連ソフトウェア
Creative AGP Wizard クリエイティブ AGP 設定ツール
BCDetect Creative 社のビデオドライバサポート
anvshell ASUS ビデオドライバのタスクトレイアイコン
Sis KHooker SIS 社製ビデオの画面調整関係ホットキーサポート
AtiPTA ATI ビデオ設定ユーティリティ
(タスクトレイのアイコンだけなので停止を推奨)
Ati2cwxx
AtiGart
AtiQiPcl
ATIPOLAB
EPSONプリンタウインドウ3環境設定 EPSON プリンタの環境設定ツール
HPDJ Taskbar Utility Hulett-Pacard プリンタ タスクトレイアイコン
LexmarkPrinTray Lexmark プリンタ タスクトレイアイコン
RegShave Fuji FinePix USB ドライバ
Exif Launcher Fuji FinePix USB ドライバ
アプリケーション
JSクィックサーチファイル自動更新 JustSystem のファイル検索用高速化プログラム
Office8 スタートバー JustSystem 社 Office 8 のランチャー
Virtual Drive 住友金属システム Virtual CD 2
Adobe Gamma Loader Adobe の画面調整機能。職人さん以外は停止を推奨
ZoneAlarm ファイアウォールソフトウェア
TrueVector ZoneAlarm のヘルパー
PersFw Tiny Firewall
ConfigSafe SystemSoft 社のシステム状態のスナップショットを取るユーティリティ
外すとかなりリソースをかせぐことができます。
Autochk
Adaptec Direct CD DirectCD (CD-R/RW でパケットライト時に使用)
HatchInside インターネット番号で Web サイトにアクセスするツール
newsupd Creative 社のドライバに付属するスパイウェア
TimeSink A Client PC 内部の情報をCONDUCENT TECHNOLOGIES 社に送信するスパイウェア
Adaware Bootup スパイウェア駆除プログラム
Norton System Doctor ノートン システムドクター。外すとかなりリソースを確保できます。
NAV DefAlert Norton AntiVirus ウィルス定義アラート
Norton Auto-Protect Norton AntiVirus 自動ウィルス保護
Norton eMail Protect Norton AntiVirus e-mail 保護
NAV Agent Norton AntiVirus 2002 Auto-Protect
iamapp Norton Internet Security タスクトレイアイコン
ScriptBlocking Norton Internet Security スクリプト遮断
nisserv Norton Internet Security
PCCIOMON ウィルスバスター リアルタイムモニター
pop3trap ウィルスバスター メールトラップ
Webtrap ウィルスバスター WebTrap
pccguide ウィルスバスター タスクトレイアイコン
pccclient ウィルスバスター自動アップデート
AlogServEXE McAfee Virus Scan
AvconsoleEXE McAfee VirusScan スケジューラ
Vshwin32EXE McAfee VirusScan VShield 機能
VsStatEXE McAfee VirusScan VShield 機能
McAfeeWebScanX McAfee VirusScan
NEC
CyberTrioModeInfo CyberTrio-NX 現在のモード表示
SAService CyberTrio-NX モード設定
外す場合、CyberTrio-NX のアンインストールを推奨
NMFTASK NEC 自動メール受信ユーティリティ
NECMFK ワンタッチスタートボタンの設定
FAX-NX Controller FAX-NX
LUNCH ランチ-NX
ホームページスクラップブックEXスタート ホームページスクラップブックEX (ホームページの自動巡回機能)
アクティブメニューNX アクティブメニューNX
インターネット設定切替ツール インターネット設定切替ツール
ThumbStudio PCカード監視 PC カード挿入の監視プログラム
富士通
PMSet98 電源管理ユーティリティ
LoadBtnHnd FM便利ツール
FM便利ツール FM便利ツール
IBM
TrackPointSrv (daemon) トラックポイントドライバ。外すとスクロール機能などがつかえなくなります。
IBMUltraBayHotSwapSound IBM ウルトラベイデバイスの活線脱着をサポートするドライバ
IBMUltraBayHotSwapCPLLoader
TpHotkey ThinkPad ボタンユーティリティ。
外すと ThinkPad ボタンが使えませんがリソースは空きます。
SONY
PowerPanel PowerPanel (画面横の電源管理などのバー)
HKserve.exe ホットキー機能。外すとホットキー(Fn+α)が使えなくなります。
JOGSERVER2 ジョグダイヤル機能
PPK Setup プログラマブルパワーキー機能
Smart Label OServer Smart Label OServer
CDRFS Warn 過去の CDRFS を読むための機能
東芝
PowerTray 画面の輝度設定
Tesckey 画面の輝度設定
Tfunckey Fn+ファンクションキー機能
Panasonic
Hotkey Fn キーでサスペンドなどを行うときに必要
PTSNOOP Panasonic モデムドライバ
日立
Pivot Software 画面の上下を反転させるツール
KEYMAP Fn+F5/F6 キーで音量調節


* デスクトップのアイコンの数を減らす

デスクトップのアイコンはそれだけでシステムリソースを消費します。最低限のアイコンを残して削除して下さい。
なお、削除(非表示)できないアイコンを消したい場合は TWeakUI で削除できます。
TWeakUI についてはカスタマイズツールをご覧下さい。

* 壁紙をなくす/スクリーンセーバーを変更する

壁紙はかなりのリソースを消費します。また、スクリーンセーバーも種類によっては CPU パワーやリソースを消費します。)
どうしても壁紙が必要でないのなら、以下の作業で (なし) に設定して下さい。
1. コントロールパネルの「画面」を起動します。
2. [背景] タブで壁紙を (なし) に設定します。
3. スクリーンセーバーが必要な場合、[スクリーンセーバー] タブで 3D 以外のスクリーンセーバーを選択します
posted by シンビアン at 10:50| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

システムリソース

システムリソースはウィンドウマネージャ(USER)やグラフィックエンジン(GDI)が内部的に使用するメモリ領域なので、メインメモリ搭載量とは関係ありません。(ときどき、「システムリソースが不足しています。」というメッセージが出るので、メモリを増やしたのですが...。という人がいますが無意味です。)

システムリソースの残量は、[スタート]−[プログラム]−[アクセサリ]−[システムツール] の「リソースメーター」で把握することができます。
このメーターを見ればわかりますが、システムリソースとして報告されるのは、GDI リソースと USER リソースの少ない方です。

基本的にプログラムやプロセスを起動すれば、リソースは消費されていきます。中でも、グラフィックアプリケーションはその特性から多くのシステムリソースを必要とします。

システムリソース自体は、Windows の仕様によって制限されているので増やすことはできませんが、Windows 起動時の空きリソースを増やすことは可能です。
空きが多ければ「システムリソースが不足しています」というメッセージを見る確率を下げることができます。
(根本的に Windows 9x/Me のシステムリソースの制限から逃れたい場合、NT 4.0 や Windows 2000、Windows XP など NT 系 Windows の使用を検討するといいでしょう。ただ、お使いのアプリケーションやデバイスがこれらの OS でも使用可能かどうかを確認する必要があります。)
posted by シンビアン at 10:47| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。