オブジェクト!?
これまで、散々オブジェクト指向って聞かされてきたけれど、そのオブジェクトとは何なの? という疑問をお持ちでしょうか。それは、平たく言えば「もの」となります。C++ではこれをクラスというものを使って構築&表現します。
おっと、既に話が飛躍したかも知れません。
オブジェクト指向というのは、単にプログラミング以外にも、システムの概要的な設計の段階からその考え方を適用可能なので、一概にその「もの」が実際には何であるか、とは言い切れないところがあります。しかし、この記事はC++プログラミングに限定するので、それはメモリ上のある構造を指しているに過ぎない、と言えます。
Cでは構造体に相当する、クラスというものがC++にはあります。キーワードもそのものズバリ、classです。そして、構造体を示すstructも、実はC++ではクラスなのです。違いはほとんどありません。ある意味、全く違わないとも言えます。(小さな違いについてはいずれまた)
クラスそのものはオブジェクトではありません。オブジェクトの設計図です。これをインスタンス化したものがオブジェクトです。「インスタンス化」という言葉は是非ここで覚えてしまってください。次のコードのように使用します。
是非、C++なのにstructにtypedefを使うような大人にならないでくださいね!?(何故か使う人が多い)
ここまでをまとめると、オブジェクト指向のオブジェクトの設計図がクラス、そして、そこからインスタンス化したものがオブジェクトになります。
なので、C++でオブジェクトとは、メモリ上の構造でしかない、と覚えておいてほぼ間違いはありません。
おっと、既に話が飛躍したかも知れません。
オブジェクト指向というのは、単にプログラミング以外にも、システムの概要的な設計の段階からその考え方を適用可能なので、一概にその「もの」が実際には何であるか、とは言い切れないところがあります。しかし、この記事はC++プログラミングに限定するので、それはメモリ上のある構造を指しているに過ぎない、と言えます。
Cでは構造体に相当する、クラスというものがC++にはあります。キーワードもそのものズバリ、classです。そして、構造体を示すstructも、実はC++ではクラスなのです。違いはほとんどありません。ある意味、全く違わないとも言えます。(小さな違いについてはいずれまた)
クラスそのものはオブジェクトではありません。オブジェクトの設計図です。これをインスタンス化したものがオブジェクトです。「インスタンス化」という言葉は是非ここで覚えてしまってください。次のコードのように使用します。
コード1
// まずはクラスの定義 class MyClass { int member; }; void func() { MyClass object; // MyClassクラスをobjectという名前でインスタンス化 }このやり方は実はCでもありましたね。Cでは構造体になりますが、そっくりなコードになります。
コード2
// 構造体の定義(C言語) typedef struct { int member; } MyStruct; void func() { MyStruct object; // これも実はインスタンス化 }ちなみに、C++ではsturctもclassと同様、typedefは不要です。
是非、C++なのにstructにtypedefを使うような大人にならないでくださいね!?(何故か使う人が多い)
コード3
// 構造体の定義(C++) struct MyStruct // structでも実際にはクラス。構造体の上位互換性がある。 { int member; }; void func() { MyStruct object; }
ここまでをまとめると、オブジェクト指向のオブジェクトの設計図がクラス、そして、そこからインスタンス化したものがオブジェクトになります。
なので、C++でオブジェクトとは、メモリ上の構造でしかない、と覚えておいてほぼ間違いはありません。
0 件のコメント:
コメントを投稿