• ベストアンサー

CとC++の違い

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

noname#6448
noname#6448

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

  • ベストアンサー
  • 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の過去分詞であり 「~の向きにあわせた、~に適応させた」という意味があります。 実世界での物や、物と物との関係をそのまま反映させるプログラム開発の方法を オブジェクト指向といいます。 わ、分かりにくい・・?

関連するQ&A

  • C言語とC++ の違いについて(オブジェクト指向)

    今まで(3年ぐらい)は,ずっとC言語を勉強してきました. C言語だったらある程度のプログラムは書けると思います. ただ,来年からC++ を使わなくてはならなくなってしまい ました... CとC++との間には一体どういった違いがあるんでしょうか? よく耳にするのが「オブジェクト指向か,そうではないか」 ということです. オブジェクト指向...,良く分りません.一体どういう ことなんでしょうか. なるべく詳しく教えていただけると助かります.また参考書 やサイトなどを教えていただいても構いません. よろしくお願いいたします.

  • Cとjavaの違い

    学校でC言語プログラミングを学んでおり,新たにjavaも習うことになったのですが, C言語とjava言語の違いはどのような所なのでしょうか? java言語は「オブジェクト指向」ですが,C言語は何指向なのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • C++とVC++の違いについて

    この質問をご覧頂きありがとうございます。 みなさんに2つ、お聞きしたいことがあり、質問させていただきます。 1.C++とVC++とでは、どのくらいの違い(どういう違い、特徴)があるのでしょうか? 2.また、これからC++/VC++でプログラミングを始めようとした場合、 C++からVC++へと段階を踏んで勉強した方がよいのでしょうか? 一応、私のプログラミングの履歴としては、 言語としてVisual Basicは多少勉強はしておりました。 また、オブジェクト指向の基礎程度(多相、継承、カプセル化)は理解しています。 抽象的な質問で大変恐縮なのですが、 みなさんの経験論や、ご参考にした本、HP等がありましたら、 ご教授いただければと思います。

  • CとC++の違いがよくわかりません。

    質問タイトルのとおりなのですが、C++はCの後継で、拡張発展させたものという気がしますが、双方はどのように違い、またそれぞれどのような特徴があるのでしょうか。 C++はオブジェクト指向を取り入れているが、多少無理してCを改変したためにやたら難しい仕上がりの言語になっているとも聞きました。C#はそのあたりが改善されているようですが。 それと、Cは手続き型言語であるということは、多少調べたので、了解しているつもりです。 また、このオブジェクト指向にすることによって、どのようなメリットがあるのでしょうか。 Cには難しいが、C++なら要領よくできるというようなぷろぐらむがあるということなのですかね。そうでなければ、わざわざC++を開発する必要も無かったと思います。 もうひとつお尋ねがあるのですが、Cを学ばずにC++からいきなり勉強をするということは可能なのでしょうか。 それとも、英語や数学などと同じく積み重ねが大事で、Cを学んでこそ、C++に初めてに移行できるものなのでしょうか ちなみに、プログラミングはこれまで未経験で学習を始めたばかりのまだ初心者です。 どなたか、回答よろしくお願い致します。

  • C++とJava

    オブジェクト指向を採用しているC++とJava。オブジェクト指向プログラミングに関連している部分で、二つの言語の大まかな違いは何でしょうか。

  • 言語別(C/C++,Java等)の計算速度の違いが知りたいです。

    言語別(C/C++,Java等)の計算速度の違いが知りたいです。 巡回セールスマン問題を解く(よさそうな解を見つける)プログラムを書くことになったのですが、言語が自由です。 オブジェクト指向言語で組もうと思っているんですが、C++、C#、Javaなどの言語のうち、計算速度が早いのはどれでしょうか? 順番も分かれば、教えてほしいです。 また、もしC言語で組めれば、やっぱりオブジェクト指向言語よりも早いのでしょうか? 大体でもよいので、分かる方いたら教えてください。 よろしくお願いします。

  • C言語、C+、C++、C#の違い

    C言語、C+、C++、C#の違いがよくわかりません。 自分でも調べてみましたが、「オブジェクト指向」という言葉が出てきて、よくわかりません。 わかりやすく教えていただけたら幸いです。 初心者がプログラミング言語を始めるならどの言語がいいですか? 幅広い分野で活用でき、初心者でもわかりやすい言語がいいのです。 私は、C言語、C+、C++、C#のどれかを勉強しようと考えているのですが、この中の言語ならどれがいいでしょうか?もちろんこの中の言語以外に初心者にわかりやすく幅広い分野で活用できる言語があればそちらにしようと思います。ありましたら教えてください。

  • オブジェクトと関数の違い

    オブジェクトと関数の違いは何ですか?また、オブジェクト指向は「いかに効率良く開発を行うかを突き詰めた考え方」という意味で合っていますか?

  • C++の将来性・・・

    昨年まで、C++プログラマをしていました。しかし恥ずかしながらぜんぜんオブジェクト指向じゃないコードを書いていました・・・ いまJavaで仕事していて感じるのですが、C++にはガベージコレクションがないので、実はオブジェクト指向プログラミングがとてもやりにくい言語ではないですか? そうなると、C++の必然性がなくなり、C Java C# に取って代わられてC++は消え去っていく言語なのでしょうか。 「いやC++はすばらしいオブジェクト指向言語だ!」というお叱りを期待しています。

  • なぜ「C言語」にOOPが実装されなかったの?

    1972年に開発された「C言語」(C++ではない)には「オブジェクト指向」というのがないのですが、なぜ「C言語」に「オブジェクト指向」というのが実装されなかったのですか? 「オブジェクト指向プログラミング」は1960年代後半に登場していたのですが、後発の「C言語」には「ポインタ」はあっても「オブジェクト指向」というのがありません。なぜ「オブジェクト指向」は実装されなかったのでしょうか? 当時コンピュータの性能が低かったため実装が難しかったことと、まだ当時オブジェクト指向自体が無名だった為、「C言語」の開発者自体も知らなかったということもあるのでしょうか?