• ベストアンサー

CとC++の違い

C++は大きな違いがオブジェクト指向ができるらしいのですが・・ 調べてみると・・ オブジェクト指向とは、データと手続き型をカプセル化したもの。 意味分かりません。(滝汗) 詳しく教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.7

 オブジェクト指向プログラミングと、従来のプロシージャ指向プログラミングでは、プログラムの中核およびプログラミングする内容が大きく異なります。  プロシージャ指向ではアルゴリズムを記述したものがプログラムであり、データを流す手順をプログラミングします。  これに対しオブジェクト指向ではオブジェクト間の連携方式を記述したものがプログラムであり、オブジェクトに与えるメッセージの流れをプログラミングします。  オブジェクト指向プログラミングの主用概念は、次の3つにあります。 ■抽象化  ・詳細を排除し、基本的特徴だけをとりだすこと。  ・関数などによってプロセスの詳細を排除する「プロシージャの抽象化」と、CのFILE型やBASICの文字列型のように、複雑なデータ構造を概念的に簡単に表現する「データの抽象化」とがあり、これにより大規模なプログラムを簡単に記述できる。クラスはこの2つを併せ持つ。 ■カプセル化  ・オブジェクト内の細かい仕様や構造を外部から隠蔽すること。  ・外部からは公開された手続き(メソッド)を通してしかデータを操作できないようにすることで、内部の仕様変更が外部に影響しなくなり、結果ソフトウェアの保守性や開発効率の向上につながる。 ■クラスの階層化(継承)  ・あるクラスをもとに、拡張や変更を加えた新しいクラスを定義し、クラスの階層構造をつくること。  ・基本クラスの性質は派生クラスへ受け継がれるため、派生クラスでは差分を定義するだけでよい。これによりプログラムの拡張性が高まる。

noname#6448
質問者

お礼

みなさん、ありがとうございました。 オブジェクト指向についてはなんとなくですが分かりました。 ところで、 オブジェクト指向以外に、CとC++の違いはあるのでしょうか?

その他の回答 (6)

  • nakashi
  • ベストアンサー率51% (21/41)
回答No.6

C++理解の為のおすすめサイトを紹介します

参考URL:
http://www.tcp-ip.or.jp/~ikken/cpp/
  • brogie
  • ベストアンサー率33% (131/392)
回答No.5

「たとえ」で紹介していきます。 「動物」というオブジェクトを定義します。 「動物」に共通の性質などはここで定義します。頭があり、足があり、毛があるなどでしょうか? 行動はどうでしょうか?  食べる、鳴く、歩くなどでしょうか? 「動物」には、「犬」、「猫」などがいます。 この「犬」、「猫」などのオブジェクトは「動物」から継承されます。その共通の「性質」などは改めて定義する必要はありません、「犬」、「猫」に特有な「性質」、「行動」などを追加します。 このオブジェクト「動物」に「なけ」という命令をすると、「犬」は「ワンワン」と吠えるでしょう。「猫」は「ニァーン」となくでしょう。これは単に「なけ」という命令だけで、そのオブジェクト(犬や猫)が自分で判断して行動するのです。これが「オブジェクト指向プログラム」です。 では、いままでの「プログラム」はどうでしょうか? 「犬」には「ワンワン」と吠えなさい! 「猫」には「ニァーン」となきなさい! とそれぞれ指示しないといけませんでした。 これが「手続き型プログラミング」です。 われわれ人間が普通に生活しているときに使用している行動や言葉に非常に近かずいています。 質問の一部だけの紹介でした(^^;

  • hero1000
  • ベストアンサー率29% (114/390)
回答No.4

まず、オブジェクトとは「モノ」を抽象化したものです。 その「モノ」は、オブジェクトにあるデータによって特定されます。  例えば「車」というオブジェクトがあったとします。そして、データとして 排気量、エンジン種別、メーカー、車体色、オーナー名・・・などなどを与える と1つの車を特定できますよね。  「Aさんの車」は1600cc、4気筒エンジン、ホンダ、白、Aさん・・・という データが入っているわけです。(こういうのをインスタンスといいます)  さてここで「Aさんの車」の車体色を白から赤に変えたとします。  しかしすぐに不具合が見つかったときに「車体色を塗り替えたのが誰か」が わからなかったらどうでしょう。とても困りますよね。  そこで、「車」オブジェクトにあるデータを変えられるのは、「B整備工場」 だけだと決めてしまうわけです。他の人(団体)は、変えられません。  こうしておくと、「車」オブジェクトのデータを変えるのは常に「B整備工場」 となるので、責任のありかが明確なわけです。  つまり、オブジェクトにはデータと、それにアクセスできる手続きが一緒に パッケージ化されてるわけですね。  こうして、「データと、それにアクセスできる手続きを定義した」オブジェクト を作っていき、それを組み合わせることで処理を実現することをオブジェクト指向 といい、それを実現するための言語をオブジェクト指向型言語といいます。  厳密に言えばC言語でもオブジェクト指向に沿ったプログラミングはできます。  ですから、CとC++の大きな違いは、C++は「オブジェクト指向に沿った仕様が 盛り込まれている」ということだと思います。

  • selfport
  • ベストアンサー率0% (0/4)
回答No.3

Cはオブジェクト指向を取り込んでC++となりました。 オブジェクト指向とは、こう考えてください。 プログラムを作るとき、サブルーチンやサブプログラムを 作ることが多いと思います。一度作成したサブルーチンは プログラムのあちこちで再利用したり、他のプログラムで 再利用したりします。この考え方をさらに押し進めると たくさんのサブルーチン(サブプログラム)があれば 簡単にプログラムが作成できるようになります。 オブジェクト指向言語とは、開発に便利な強力なサブルーチン集が提供されたものと考えてください。 このようなオブジェクト(サブプログラム)を組み合わせてプログラムを作る言語です。 (厳密にいうと違うのですが、考え方の基本は上記のようなものです。)

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.2

こんにちは、honiyonです。  今までは関数は関数、データはデータでしたが、これらを組み合わせて「モノ」として定義したのが「クラス」です。 「データと手続き型をカプセル化したもの」とは一般的にクラスといいます・・・というか私はそう思っているのですが間違ってるのかな?(^^i  クラスについて説明します。  ここではテレビやビデオについて説明します。  もし「テレビをつける」という関数をつくるとします。 ただ漠然「void つける();」なんてしたら何をつけるのか分からないので、「void テレビをつける();」などと書く事でしょう。 次にビデオの場合も「void ビデオをつける();」となると思います。 どちらも電源を入れるという動作には変わりはなく、対象物が違うだけで2つの、別の名前(前に対象物の名前がついただけだけど)になっています。   クラスを用いると「つける」という名前だけの関数を作る事が出来ます。  使い方は以下のようになります。 「テレビ.つける();」「ビデオ.つける();」  イメージ的には構造体(テレビ/ビデオ)の中に関数「つける」が入っているような感じです。 ただ間にドットが入っただけじゃん!!と突っ込まれそうですが、これがとても便利なのです。 例えば「PC.つける」では? 答えは「PCの電源を入れる」ための関数となります。 つまり、ある程度関数名を見ただけでその効果がイメージできちゃうんですね。 変数にしても然り。  そしてある程度何でも汎用的に使えそうな変数や関数をまとめたクラスを作っておくと、継承なんていうものが出来たりします。 例えば関数「つける」「けす」と変数「置き場所」をまとめたクラスを作成しておきます。 名前は(電気製品)とします。 それぞれの動作はイメージできると思うので省略します。  そして、 「テレビ = class(電気製品)」としてクラス「テレビ」に継承すると、中身に何も書かずに「テレビ.つける」という動作が出来てしまったりします。  もし Cでこういう事をしたかったら「void つける(対象 taishou);」をという関数を作っておいて、「つける(テレビ)」となります。 が、真似できないのは「オーバーライド」ですね。 ただ単純に「つける(テレビ);」と同効果ではなく、「つける」関数を「テレビ」用に味付け出来たりするのが「オーバーライド」です。  クラスの醍醐味は、継承で共通する部分の再開発を避ける事が出来、また関数名も自然と統一されてくるので扱いやすいという所にあると私は思います。  ん~、こんな説明で良いのかな(^^; 多分微妙にニュアンスが違っている所もあると思うので、もし説明が難解過ぎて分からないようでしたら「関数と変数が詰まってる構造体」でも考えておいてください(笑) 私も最初はそこからクラスを覚えていきました。 そして徐々にオーバーライド、オーバーロード等などクラス独自の楽しみ方を覚えていきました。  余談&個人的な意見ですが、C++より Delphiを使った方がクラスやオブジェクト指向を覚えやすいかもしれません。 Delphi自体やそのコンポーネントがクラスやオブジェクトをフルに活用しているので、使っているうちにその考えで馴染んでいきます。   参考になれば幸いです(..

  • issy-to
  • ベストアンサー率20% (1/5)
回答No.1

オブジェクト指向を英語でいうと”Object-Oriented”となります。 ”Object”とは「物・物体」を意味し”Oriented”はorientの過去分詞であり 「~の向きにあわせた、~に適応させた」という意味があります。 実世界での物や、物と物との関係をそのまま反映させるプログラム開発の方法を オブジェクト指向といいます。 わ、分かりにくい・・?