これまでのすべての回答は、「cとc ++の違いは何か」という、あなたの質問のトピックに焦点を当てています。現実には、違いが何であるかを知っているように聞こえますが、なぜその違いが必要なのか理解できません。それで、他の答えはオブジェクト指向とカプセル化を説明しようとしました。
あなたの質問の詳細に基づいて、あなたはいくつかのステップを踏む必要があると思うので、私はさらに別の答えでチャイムインしたかった。
C ++やOOの目的を理解していないのは、アプリケーションがデータを保存するだけでよいように思えるからです。このデータは変数に保存されます。「なぜ変数にアクセスできないようにしたいのでしょうか?今ではもうアクセスできません!すべてを公開するか、より良いがグローバルにすれば、どこからでもデータを読むことができ、問題はありません。」-そして、あなたは正しい、あなたが現在書いているプロジェクトの規模に基づいて、おそらくそれほど多くの問題はありません(または、ありますが、あなたはまだそれらに気付いていません)。
あなたが本当に答える必要のある根本的な質問は、「なぜデータを隠したいのでしょうか?それを行うと、私はそれを扱うことができません!」だと思います。そして、これが理由です:
新しいプロジェクトを開始し、テキストエディターを開き、関数の作成を開始するとします。後で保存するために何かを保存する必要があるたびに、変数を作成します。物事を簡単にするために、変数をグローバルにします。アプリの最初のバージョンは素晴らしい動作をします。さらに機能を追加し始めます。より多くの関数があり、前に保存した特定のデータを新しいコードから読み取る必要があります。他の変数を変更する必要があります。より多くの関数を書き続けます。あなたが気づいたかもしれない(あるいは、そうでない場合、絶対に気づくでしょう)は、コードが大きくなると、次の機能を追加するのに時間がかかります。また、コードが大きくなると、以前は機能していたものを壊さずに機能を追加することがますます難しくなります。どうして?あなたは何を覚えておく必要があるため、すべてをグローバル変数が保存されており、それらのすべてが変更されている場所を覚えておく必要があります。また、どの関数が正確な順序で呼び出しても問題ないことを覚えておく必要があります。異なる順序で呼び出すと、グローバル変数がまだ完全に有効ではないため、エラーが発生する可能性があります。これに遭遇したことがありますか?
典型的なプロジェクト(コード行)の大きさは?現在、プロジェクトの5000〜50000倍の大きさのプロジェクトをイメージングしています。また、複数の人が働いています。チームの全員が、これらすべての変数が何をしているのかをどのように思い出すことができますか(あるいは意識することさえできますか)?
上記で説明したのは、完全に結合されたコードの例です。そして、時間のthe明期(1970年1月1日から始まったと仮定)以来、人間はこれらの問題を回避する方法を模索してきました。それらを回避する方法は、コードをシステム、サブシステム、コンポーネントに分割し、データにアクセスできる関数の数を制限することです。5つの整数とある種の状態を表す文字列がある場合、5つの関数のみが値を設定/取得すれば、この状態で作業しやすくなりますか?または、100個の関数がこれらの同じ値を設定/取得する場合はどうなりますか?OO言語(Cなど)がなくても、人々はデータを他のデータから分離し、コードのさまざまな部分の間に明確な分離境界を作成することに懸命に取り組んできました。プロジェクトが特定のサイズになると、「関数Yから変数Xにアクセスできますか」というプログラミングの容易さがなくなります。
これがオブジェクト指向の概念が導入された理由であり、これがそれらが非常に強力な理由です。データを自分から隠すことができ、意図的にそれをしたいのです。そのデータを見るコードが少ないほど、次の機能を追加するときに何かを壊す可能性が低くなるからです。これは、カプセル化とオブジェクト指向プログラミングの概念の主な目的です。これらを使用すると、システム/サブシステムをさらに細かいボックスに分割し、プロジェクト全体の規模に関係なく、特定の変数セットにアクセスできるのは50〜200行のコードだけであるということです。OOプログラミングには明らかに多くのものがありますが、本質的に、これがC ++がデータ/関数をプライベート、保護、またはパブリックとして宣言するオプションを提供する理由です。
OOで2番目に大きなアイデアは、抽象化レイヤーの概念です。手続き型言語には抽象化もありますが、Cではプログラマーは意識的にそのようなレイヤーを作成する必要がありますが、C ++では、クラスを宣言するときに自動的に抽象化レイヤーを作成します(この抽象化の有無はユーザー次第です)値を追加または削除します)。抽象化レイヤーについて詳しく読んで研究する必要があります。さらに質問がある場合は、このフォーラムでもそれらに答えることができると思います。