• ベストアンサー

C++かCの再選択 

いつもお世話になっています。 c++の初心者ですが、煮詰まったので質問させてもらいます。 私はC++の入門書を理解し2~3個のコンソールプログラムを作った位のレベルです。煮詰まったのは、このままC++を勉強するかそれともCを勉強した方がいいのか迷っています。Cは知らないのでC++入門書を勉強した時、Cを勉強しているのと一緒なのですか(軽くSTL、オブジェクト志向の考え方を追加した感じ) Cのほうが文法、メモリの動きなどサンプルプログラム を作るにもクラスをつくる手間が省け簡単に書けますし 早く習得できると思うのですが。気になったのは ここの書き込みで、Cの拡張がC++とCとはC++ は異言語の意見があり、私にはわかりません。 ただ「C++がわかっていてCを知らない人はいない」との意見に納得した事もあり私の選択は間違っていた のかなと思ったのです。できればC->C++経験者と いきなりC++経験者のアドバイスが聞きたいのです。

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

  • ベストアンサー
  • nyan5504
  • ベストアンサー率42% (6/14)
回答No.5

>職業にするならという事でしょうか。 いえ、もし時間的制約がなければC++を選択するべきです。 現状では、オブジェクト指向を学ぶのならJavaですし、メモリなど計算機を知るためにはCなので、C++は学習目的ではあまりオススメしません。 しかし、C or C++ということだと、オブジェクト指向をまったく考慮していないCでは不十分なので、C++を選択するほうをオススメしています。 >短期的に実用レベルに達したいと思っているので、Cでしょうか。 Cの方が良いと思います。C++は短期で習得できるほど簡単ではありません。ただ、STLなど、便利なもののみを使うという選択はアリなので、C+-という気持ちでC++を学ぶのは悪くないと思います。 #C+-としてでも、関数途中での変数宣言とか割と便利な事が多いです。 >ただメモリ内の動きまではわかっていない段階です メモリの様子が全く分からないのであればCをきちんと学習した方がよいです。C++でももちろんメモリを想像することはできるのですが、非常に難しいですし、そのような解説をする書籍もあまりありませんので。

tomojyuu
質問者

補足

たびたびの回答ありがとうございます。 補足質問なのですが、C+-(?)を勉強して、企業では Cプログラマーとして雇用してくれるのでしょうか? C+-プログラマーとしては無理ですよね?

その他の回答 (5)

  • matyrcry
  • ベストアンサー率47% (101/213)
回答No.6

なんだかVC++かボーランドCかっていうツールの選 択の話みたいに見えるんですが。 PCベースのソフト屋さんは、既存のライブラリの使い 回しがメインになるんで、そのあたりで有利なツールを 選択するんでは? ROM容量が足りないマイコンの世界だと標準関数を入 れる余裕もないので機能削った関数を自作します。 こっちの世界ではC++の機能は資源を浪費しすぎて選 択の余地がないですよ。 小数意見っぽいですが、そういう話もあるってことで。

tomojyuu
質問者

お礼

回答ありがとうございます。 また違った角度からのアドバイスですね。 Cをやろうと思います。また本屋にいかなくてはなりません 。

回答No.4

まずは、何がしたいか、って所でしょうか? Cが得意とする所、C++が得意とする所、全く持って違います。 形は似ていても、名前は似ていても、全く違う言語です。 あくまでも簡単にいいますが Cは、単純処理系をしっかりと記述するのに向いています。 (コンソールアプリ、サーバー等) C++は、複雑な処理を容易に記述するのに向いています。 (Windowsアプリ等) そして、Cはやろうと思えば標準ライブラリを一切使用せずに完全にくみ上げることもできます。 (例:ゲーム専用機(メーカーライブラリは使うが)、qmail http://qmail.jp/ 等) まず、C++を覚えるにしろ、Cは最初に覚えるべきです。 Cの本当の基本を抑えた後に、C++を勉強するといいでしょう。 WindowsはC++で組むのが前提ですので、いきなりWindowsアプリであれば、C++を覚える必要がありますが・・・ 最後に・・・C と C++ で、MS-DOSで 「Hello world」 と表示するプログラムを組んだときのことです。 Cだと、1000バイト程度(やろうと思えば100バイト以下になりますが) しかし、C++だと、いきなり、50kにもなってしまいました。

tomojyuu
質問者

お礼

回答ありがとうございました。 ymdaさんもCを最初に覚えるべきですね。 いきなりC++から勉強している人はあまりいないのでしょうか?。もしかして私は無謀な事をしていたのでしょうか? 怖いです。 >Cの本当の基本を抑えた後に、C++を勉強するといいでしょう。 そうします。

  • nyan5504
  • ベストアンサー率42% (6/14)
回答No.3

現状で、Javaなどが選択肢になく、CとC++のどちらかということであれば、間違いなくC++を選択するべきです。 ただし、習得が簡単なのは当然Cですので、短期的に実用レベルに達したいなどの場合にはCの方が良いでしょう。 またどうやってもC++を理解できない人がたまにいらっしゃいます。そのような人はCを選ぶしかありませんが、これはC++を学んでみないと何とも言えないので結局はC++を始めた方がいいです。 C++の学習の方法として、Cの部分から始めるか、C++とCを合わせて学ぶかという二通りの道があります。これは両者一長一短で、その人に合わせて選ぶものですので、一概には判断できません。

tomojyuu
質問者

お礼

回答ありがとうございます!。 >現状で、Javaなどが選択肢になく、CとC++のどちらかということであれば、間違いなくC++を選択するべきです。 職業にするならという事でしょうか。 >習得が簡単なのは当然Cですので、短期的に実用レベルに達したいなどの場合にはCの方が良いでしょう。 短期的に実用レベルに達したいと思っているので、Cでしょうか。 >C++の学習の方法として、Cの部分から始めるか、C++とCを合わせて学ぶかという二通りの道があります。これは両者一長一短で、その人に合わせて選ぶものですので、一概には判断できません。 初心者向けのC++の本を理解した所なので、文法的には わかります。ただメモリ内の動きまではわかっていない 段階です、Cのプログラマーとしての資質もわかりません ので、Cを勉強してみたほうがいいのでしょうか。

  • togino
  • ベストアンサー率75% (97/129)
回答No.2

私は C 言語から C++ 言語に移行したタイプです。 理由は簡単。C++ 言語の方が上位だからです。 「Cの拡張がC++」これは定義からしても正しいです。 「CとC++は異言語」これも正しいです。同じ言語なら同じ名前がつきます。 C 言語と同じ文法体系を踏襲し、新しい機能を追加して拡張した言語が C++ 言語なのですから。 あまりよい例えではないですが、 「数ある動物の中で、私とあなたは同じ人間ですが違う人間です」という感じで、ある側面で見ると同じですが、別の側面から見ると違うものでしょう。そんな感じ。 で、学習の順番となりますが、まず C 言語を知らずして C++ 言語を扱うことは不可能です。 C++ 言語は、C 言語ととってかわる代物ではありません。 C++ 言語から C 言語の部分を差し引いた ++ の部分だけで、プログラムは書けないです。(^^;) よって tomojyuu さんが今 C 言語の勉強になるのは当然だと思います。 そして、このまま C 言語にどっぷり浸かっていくのか、それとも C++ 言語に踏み込むのか、という決断になる訳ですよね。 それは、あなたが 「オブジェクト指向の必要性、STL の便利さ」を感じるか感じないのか、ここが宗教論争の起源になる訳ですが、この点にかかってきます。 「クラスを作らなくてもプログラムは作れる」も正論ですし 「クラスを作った方がプログラムの拡張性・保守性において優れる」も正論です。 後者においては、業務用や規模が大きくなれば 「クラスを作らないとプログラムは作れない」が正論でしょう。 あなたは、この2点が共に正論になる点をどう思われます? ■ クラスを作らなくてもプログラムは作れる ■ クラスを作らないとプログラムは作れない 私は、この点に関して、こういう結論をもっています。 「『なんのプログラムを作るのか?』に依存する」というわけです。 ありきたりに言えばケースバイケースな訳です。 クラスをつくるのは手間ですし、習得には時間がかかるでしょう。しかし、そこにどっぷり浸かってしまうとクラスを作ることが出来なくなってしまい、そのクラスの必要性・重要性すらも感じなくなってしまうでしょう。 そして、規模の大きめなプログラムを書く必要が生じた時、C++ を勉強する段になって、そのめんどくささに(クラスをつくらない手軽さに慣れすぎ)破綻をきたした人が「初めから C++ をしとけばよかった」となる訳です。 C++ 言語が生まれたのは、やはりその必要性があったからです。しかし、それがなくても C 言語ですばらしいプログラム・ソフトが生まれてきたのも事実です。いわゆる UNIX なんか、あの OS すべてを C 言語で書き上げて、かつメンテしてる訳ですから、それだけの力が C 言語にはあるのです。 tomojyuu さんがなんの為にプログラムを勉強されているのか分かりませんが(←でもこれが一番重要だったりするのですが(^^;)) 変数の型(intなど)・構造体(struct)・ポインタ(int* や &)・メモリ管理(malloc,free) などの C 言語の習得をまず最優先させ、それが使えるようになった段階で クラス(class)・メモリ管理(new,delete)・テンプレート(template)・イテレーター(iterator) の C++ 言語の習得をはかった方がよいと思います。 後半になればなるほど、必ずしも必要とはいえない概念(かつ難しい)が多くなりますので、必要と思えないうちは分からなければ、「そんなんがあるんだ~」程度におさえておけばいいと思います。 そして、Java 言語や BASIC 言語、Perl 言語、Ruby 言語と幅を広げられた方が、 C/C++ 言語の理解がより一層深まるものと思います。 結論ですが、「ぐだぐた言わないで勉強してみること!分からなければ、飛ばして次に進む」 ある一線を越えると、プログラム言語が結局すべて同じものであるように思え、かつ違うものと認識して使い分かることができるようになりますよ。 長くなってすみませんでしたが、参考にして頂ければ幸いです。 int n = 3; cout << n << endl; と int n = 3; print("%d\n", n); の違い・・・本質的に大きく違うが結果は一緒。 cout は不要といえば不要だが、必要な場合もある。 とりあえず使ってみて、面倒・不要と思えば使わなければよい。ただ世の中にはそれが必要な場面があるから存在していることをお忘れなく。

tomojyuu
質問者

お礼

長文の回答ありがとうございます。 「Cの拡張がC++」「CとC++は異言語」どちらも正しいのですか、わかりました。 >tomojyuu さんがなんの為にプログラムを勉強されているのか分かりませんが(←でもこれが一番重要だったりするのですが(^^;)) 職業にしたいと思っています。なので、習得に差が あまり無ければC++を覚えたいのです。 私がイメージできる回答で助かりました。 >クラスをつくるのは手間ですし、習得には時間がかかるでしょう。しかし、そこにどっぷり浸かってしまうと クラスを作ることが出来なくなってしまい、そのクラスの必要性・重要性すらも感じなくなってしまうでしょう。 怖い事です。それを怖がるあまり、Cに移行できないのです。 >int n = 3; cout << n << endl; と int n = 3; print("%d\n", n); 微妙に入出力命令違いますよね。C++のほうが簡単でわかりやすいですよね、C++には文字列関数STRING、便利ですよね。 >結論ですが、「ぐだぐた言わないで勉強してみること!分からなければ、飛ばして次に進む」 簡単なコンソールプログラムを作っているのですが、テンプレートをいれようとか、クラスはこうして...など勉強した事を使おうと思うあまり、悩んでしまうのです。クラスは使わず、C++の良い部分(入出力関係、STL、)だけを使うのは邪道なんでしょうか?。

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 難しい問題ですね。(宗教論争になりそうです。これやりはじめると。)  まず、文法的には、CはC++のサブセットです。したがって、Cの拡張がC++という言い方は、言語の定義的には正しいです。  これをもう少し進めると、C++をすべて知っているということは、文法的には、Cの文法もすべて知っているはずです。Cは、C++の一部分ですから。というわで、純粋に文法的な話なら、C++で作成ができるなら、Cでも組めるはずでしょうが・・・  問題は、C++で便利に使えるようになった、オブジェクト指向の考え方です。  「プログラムを書くのにクラスを作る手間が省けるから、Cの方が楽・・・」なら、何のために、クラスが使えるようになったのでしょうね?そんなのいらないじゃないの。というのが本題に近いでしょう。  プログラミングのパラダイムの話ですが、少々掘り起こしてみましょうか。  手続き重視のプログラムの考え方では、プログラムを作成するというのは、手順を考えるということでした。その為にまず作れといわれたのが、フローチャートという図面です。  しかし、プログラムがだんだん大規模になると、プログラムの主人公は、実は、データの構造とそれを操作するための一連の手続きではないか?という考え方が出てきました。単純にいってしまえば、これがオブジェクト指向の考え方です。  たとえば、伝票を入力して、この伝票の合計をレポートに出力するプログラムを考えます。  手続き重視でものを考えると、まず、伝票の入力ルーチン、集計ルーチン、レポートの作成ルーチン、そして、伝票のデータを保存・読み出しするための関数群・・・といった具合に、ものを考えます。これが、CをCらしく組んだ場合の手法です。    これに対して、オブジェクト思考的には、まず、伝票というデータ構造・レポートというデータ構造・データ保存のためのファイル・・・と言ったものがあるという風に考えます。そして、ファイル構造は、「伝票を入力として受け取り、保存する」、「レポートは、必要なデータをファイルから受け取る」といった具合に、これらのデータ構造に対して、どんな操作を加えるのかということを中心にプログラム全体を構成していきます。  だいぶん、駆け足で書いてますが、まぁ、大筋こんなところです。  「オブジェクト指向のプログラムは、Cではかけないか?」といえば、実は、書けます。ちゃんと、プログラマーが注意して、そのように構成すれば、かけるんです・・・が、C++の新しい構文を利用すれば、より簡単に書けます。C++がCに付け加えた部分は、ここにあります。  そして、プログラムを組むためのパラダイムが変わると、プログラムの構造が根本的に変わります。C++の文法も使ったCのプログラム・C++らしいC++のプログラム・・・といったあたりの差は、ここに起因します。この意味でいうと、CとC++はまったくの異言語でしょう。設計のスタートの考え方が違いますから、まぁ、見かけが大幅に変わるのは無理ない話です。  さて・・・それでは、学習ですが・・・  オブジェクト指向の考え方も、実は、その前の構造化プログラミングを土台に構築されています。突然ぽっと出てきたまったくの異文化というわけではないのです。  しかし、どうせ、オブジェクト指向のパラダイムを学んでいけば、必然的に構造化プログラミング以前のパラダイムも吸収できますから、これも、C/C++の関係と同じかもしれません。  結論としては、今の小さなプログラムを組んで、プログラムというものを学習し始めている段階であれば、CでもC++でもどちらでもいいです。C++だから、クラスを作らなければならないと考える必要はまったくありませんし、オブジェクト指向でなければ既存のクラスライブラリを使ってはいけないというわけでもありません。よって、便利であれば、STLもどんどんつかえば良いでしょう。  ただ、ある程度、大きなプログラムを組もうとすれば、必然的に、全体を細分化しないと、わかりやすい・綺麗なプログラムは組めません。その辺は意識しておいた方がよいでしょう。  そして、だんだんと、実用的なプログラムを組めるようになってきた頃、もう一度、オブジェクト指向の本を読んでみてください。このとき、クラスを作成するというのが、手続きを分けるために関数を作るのと同じ事なんだということが判れば、C++の拡張の本来の意味がわかると思います。  そして、それが、冒頭の「何のために、クラスが使えるようになったのでしょうね?」という問いへの答えになります。

tomojyuu
質問者

お礼

長文の回答ありがとうございます!。 >結論としては、今の小さなプログラムを組んで、プログラムというものを学習し始めている段階であれば、CでもC++でもどちらでもいいです。C++だから、クラスを作らなければならないと考える必要はまったくありませんし、オブジェクト指向でなければ既存のクラスライブラリを使ってはいけないというわけでもありません。よって、便利であれば、STLもどんどんつかえば良いでしょう。 あくまで現段階では、それでよいのですか?、非常に 楽になりました。実際クラスをつくるのは手間ですし C++を勉強していても実質Cの基本を勉強しているような ものなので、C++の楽な部分のみ勉強すればよいのですね そしてC++に慣れる事が大事なのですね。

関連するQ&A

  • CかC++どちらを覚えるべきですか?

    初めまして。せいじと申します。よろしくお願いします。 プログラミング経験なしです。今30歳です。 遅すぎますが、これからC言語かC++言語をマスターしたいと思っています。 Windows 98 + Borland C++ Compiler 5.5 で勉強しようと思ってます。 Cの拡張されたものがC++だからC++を覚えようと思って、C++の本を買いました。 ・新C++言語入門 ビギナー編 SOFTBANK Publishing 林 晴比古 著 ・詳説C++             SOFTBANK Publishing 大城 正典 著 2冊ともまだ最初の方を読んで実践しただけです。 クラス、オブジェクト指向プログラミング等々が何なのか分かっていないのに、 C++をする意味があるのか、まずはCで十分ではないのか? と思うようになってきました。 実際どうしたら良いのでしょう。 何も知らないならC++からでも良いのでしょうか。 違いが分からないならCで十分なのでしょうか。 みなさんの意見を聞かせてください。 よろしくお願いします。

  • C言語でプログラムを作る課題があたえられました

    プログラムは作ったのですが、それを書いた拡張子『.c』のソースファイルとコンパイル後に作成された拡張子『.exe』のファイルを提出することになっています。『.c』のファイルとは『C source』に書かれているプログラムしょうか。また、『.exe』のファイルとはアプリケーションに書かれているものでしょうか、それともobject fileに書かれているものでしょうか。35年前にfortranは勉強して少し、プログラムを作った経験はあるのですが、今では言葉の意味が理解できません。恐れ入りますが詳しく教えてください。

  • C++について

    C++について C++を学ぼうと思って入門書を探しています。 今までにC++、オブジェクト指向はやったことがありません。 C言語は初級と中級の間ぐらいの知識です。現在は独習Cを読んで、理解を深めています。 VC++を理解したいと思って業務(ツール)のソースや構成などを見てもさっぱりでした。 どこから学んでいけばよく分からない状態です。 オブジェクト指向を理解しつつ、C++も習得していってVC++を使えるようになりたいです。 Visual C++〈1〉はじめてのWindowsプログラミング (プログラミング学習シリーズ) が良いと聞いたのですが、C言語を分かっている程度の私が読んで勉強になりますか? もし、他に取っ掛かりやすい本がありましたらお願い致します。

  • C# 勉強方法

    C# 勉強方法 現在入門書や入門サイトをいくつも回り初級レベルにはなれたと思います。しかしその先が見えません。 ネット上の色んなサンプル見てるのですがリンク切れてるのも多く、初級者レベルのサンプルばかりで あまり参考にはなりそうにありません。家で勉強するにあたってどんなことを勉強すればいいかわからなくなってきています。C#で開発をばりばりやっておられる方、どのような勉強で上達しましたか?この参考書で勉強しろ!とかオススメ書籍があれば是非、ここのサイトのソースをじっくりみろ!とオススメサイトがあれば是非、またこういう勉強を家ではやっていた、またはやっているなどをあれば教えてください。 焦るなという意見もでそうですが焦っております。道が見えなくて大変こまってます

  • Cのコンパイルができない

    学生です 現在「C 入門の入門」という本を使ってC言語を勉強し始めています この中でプログラムのコンパイルにチャレンジするにあたり #include <sudio.h> main () { printf("C programming"); return 0; } というプログラムを書き、コマンドプロンプトから c:\Source>bcc32 sample.c と入力したのですが、 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland sample.c: エラー E2209 sample.c 1: インクルードファイル 'sudio.h' をオープンできない 警告 W8065 sample.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) *** 1 errors in Compile *** と表示され、コンパイルに失敗しました 参考書によるとCコンパイラの設定ミスであり、bcc32.cfg と ilink32.cfg を設定を見直せと書いてあったので必死に見直したのですが、参考書に書いてあるミスのどれも当てはまらず、何度cfgファイルを書き直しても同じ結果になってしまいました ついでに書いてあったミスとは ・C:\Borland\bcc55にBinディレクトリは存在するか? ・cfgファイルは存在するか? ・ファイルの拡張子は問題ないか?表示されているか? ・記述内容は間違っていないか? の4点です いったい何が問題なのでしょうか? まったくわからないのですが、どなたか思いつく方がいらっしゃいましたらお願いします

  • C#の勉強するにあたってのアドバイスをお願いします。

    こんにちは。 私はC#でのプログラミングを最近始めました。 入門書などを読んで少しはC#について理解をしてきたのですが、いざプログラミングをしようとするとどうしてよいのかよくわかりません。 私の今までの経験上、少し実用的であるプログラムを解説を理解しながら自分の手で書いていく方法が一番習得しやすいと思っています。 しかし、いざそれにあった本を探してもなかなか見つからず、Webサイトも見て回ったりはしているのですが、どうもしっくりくるものがありません。 プログラムを自分で書いて理解していくのにちょうどいい本やWebサイトを教えてください。 それと、もしあるのならこういう学び方をするのがいいよ。というアドバイスがあったら是非そちらもいただきたいです。 お願いします。

  • C++のSTLかJAVAのGUIの学習

    C++のSTLかJAVAのGUIを詳しく勉強したいです。 お勧めの本を紹介してください。 C++とJAVAの入門書は読み終わってます。 林晴比古さんの本を教科書で使いました。 新C++言語入門 シニア編 クラス機能 上巻、下巻 改訂 新Java言語入門 シニア編

  • プログラミングC#が難しくて困っています。

    プログラミングをしたいと思い、独習C#を使ってプログラミングの勉強中です。 プログラミングは全くの初心者です。 他の入門書でもそうなのかもしれませんが、論理演算子やビット演算子、配列などの内容が書かれていますが、これらが一体何の役に立つのか分からなくて困っています。 読んでいても理解できないです。 本にケチを付けているわけではないです。 おそらく私にプログラミングのセンスがないんだと思います。 また、この本では、コンソールアプリケーションの説明が多いのですが、私はウェブアプリケーションに関心があります。 基礎だと思って読み進めるべきでしょうか? サンプルプログラムも地道に本の真似をして自分で打っていったほうがいいのでしょうか? わからないことがあってGoogleで調べても、理解できないです。 本当に、プログラミングが難しいです。 独習C#のような本は、全て理解する必要があるのでしょうか? 質問が多くなって申し訳ありません。

  • C言語学習について

    大学4年生で研究室に配属されています。プログラムをする学科にいますが、あまりプログラムを作れません。 C言語の文法書を読んだり、サンプルプログラムを見たりしてはいます。独学はなかなか難しいです。 特にC言語でつくりたいものもありません。 C言語を使えるようになりたいのですがどうしたらいいでしょうか。C言語のいろいろな本を借りたり見たりはしています。実際に作った方が身につくとは思うのですが。サンプルプログラムを打つのも飽きてしまいます。 C++とかJAVAとかありますが、C言語しか使ったことがないのですが気になります。 近くにプログラムを教えてくれるような教室もありません。 助言お願いします。

  • VIsual C++6.0のソースを書くところについて

    プログラミング言語の経験は全くない初心者です。 まだ何をつくろうとは考えていませんが、 将来的には簡単なゲームみたいなのを作れれば、と思ってます。 とりあえず新Visual C++6.0入門 ソフトバンク 著者 林 晴比古(はるひこ) を買って実際やってみました。 本に書いてある通りにしてみると確かにできました。 この本であまり文法が理解できなかったので途中で C言語の文法説明をサイトで見つけたので、 今度はそれを見ながらやろうとしたのですが、 問題が一つ! そういうソースを見つけて打つときはどこに打ったらいいのでしょうか? そのソースは年を聞いたりするプログラムなんですけども・・ 詳しい場所を教えてくだされば幸いです。