• ベストアンサー

CとC++の違い

honiyonの回答

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

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

関連する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言語」の開発者自体も知らなかったということもあるのでしょうか?