2006年01月16日

コピーコンストラクタ

構造体やクラスのインスタンスを直接関数の引数に渡したり,関数の返値にしたりする場合を考えてみよう.

Point home(Point x)
{
x.move_to(0,0);
return x;
}
...
Point p(10,20,1);
Point q = home(p);

定義済みのPointには引数のないコンストラクタが定義されていないので,このままだとPoint qの部分がエラーになるが,それはここでは置いておく。

この例で,home(p)を呼び出す場合,次のような処理が行われている.
1. pの内容をスタックにコピーする.
2. 関数homeの先頭にジャンプ.
3. homeの内容を実行する.
4. xの内容をスタックにコピーする.
5. スタックの内容をqにコピーする.
ここでは,インスタンスの内容をコピーするという操作が頻繁に行われる.この「インスタンスの内容をコピーする」という操作は,新しいインスタンスを作っているのと同じだから,この時にもコンストラクタが呼び出される.この時呼び出されるコンストラクタを,コピーコンストラクタという.コピーコンストラクタは,次のような形をしている.

class Point : public GraphicObject {
....
public:
Point(Point& x); // コピーコンストラクタ
};

コピーコンストラクタは,自分と同じ型への参照を引数として持つ.クラス定義の中でコピーコンストラクタを定義しない場合,「各メンバ変数の値をそれぞれコピーする」という動作をするコピーコンストラクタが暗黙に定義される.それではすまない場合は,コピーコンストラクタを自分で定義しなくてはならない.
posted by シンビアン at 20:24| Comment(0) | TrackBack(1) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

派生クラス

inherited class

 C++などのオブジェクト指向言語において、あるクラスを継承して作成したクラスを、派生クラスという。継承元のクラスは基底クラス(ベースクラス)と呼ばれる。

 派生クラスからは基底クラスのpublicおよびprotectedメンバへのアクセスが可能。また、基底クラスのメンバ関数や演算子をオーバーライドすることもできる。
posted by シンビアン at 20:11| Comment(0) | TrackBack(1) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

基底クラス

base class

 単純基底クラス、抽象クラス。

 C++などのオブジェクト指向言語において、クラス階層の最上位にあるクラスを指してこう呼ぶ。もしくは、派生クラスと対になる言葉として、派生クラスを定義する際の派生元のクラスを基底クラスと呼ぶ。
posted by シンビアン at 20:10| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

広告


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

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

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


×

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