到目前为止,所有答案都集中于您所陈述的问题主题,即“ c和c ++有什么区别”。实际上,听起来您知道区别是什么,您只是不明白为什么需要该区别。因此,其他答案试图解释OO和封装。
我想提出另一个答案,因为根据您的问题的详细信息,我认为您需要退后几步。
您不了解C ++或OO的目的,因为在您看来,您的应用程序似乎只需要存储数据。该数据存储在变量中。“为什么要使变量不可访问?现在我不能再访问它了!通过将所有内容公开,或者更好的是全局的,我可以从任何地方读取数据,而且没有问题。” -是的,根据您当前正在编写的项目的规模,可能没有很多问题(或者有很多问题,但是您还没有意识到这些问题)。
我认为您真正需要回答的基本问题是:“为什么我要隐藏数据?如果这样做,我将无法使用它!” 这就是为什么:
假设您开始一个新项目,打开文本编辑器并开始编写函数。每次您需要存储某些内容(以备以后使用)时,都将创建一个变量。为简化起见,您将变量设为全局变量。您的应用程序的第一个版本运行良好。现在,您开始添加更多功能。您具有更多功能,需要从新代码中读取之前存储的某些数据。其他变量需要修改。您继续编写更多功能。您可能已经注意到的(或者,如果没有,您将来肯定会注意到的)是,随着代码的变大,添加下一个功能所需的时间越来越长。随着代码的增大,在不破坏以前有用的功能的情况下添加功能变得越来越难。为什么?因为你需要记住所有您的全局变量正在存储,您需要记住所有变量都在何处被修改。而且您需要记住可以按确切的顺序调用哪个函数,如果以不同的顺序调用它们,则可能会出错,因为全局变量还不是很有效。你遇到过这个吗?
您的典型项目有多大(代码行)?现在,对一个项目进行成像是您的5000到50000倍。另外,其中有多个人在工作。团队中的每个人如何记起(甚至意识到)所有这些变量在做什么?
我上面描述的是完美耦合代码的示例。从时间的曙光开始(假设时间从1970年1月1日开始),人类一直在寻找避免这些问题的方法。避免它们的方法是将代码分成系统,子系统和组件,并限制有多少个函数可以访问任何数据。如果我有5个整数和一个表示某种状态的字符串,那么仅5个函数设置/获取值对我来说会更容易处理这种状态吗?还是如果100个功能设置/获得了相同的值?即使没有OO语言(例如C),人们也一直在努力将数据与其他数据隔离,并在代码的不同部分之间创建清晰的分隔边界。当项目达到一定大小时,编程变得不那么容易,“我可以从函数Y中访问变量X”,
这就是为什么引入OO概念的原因,也是它们如此强大的原因。它们使您可以对自己隐藏数据,并且您想要有目的地这样做,因为看到该数据的代码越少,则添加下一个功能时,您将破坏某些东西的机会就越少。这是封装和OO编程概念的主要目的。它们使您可以将我们的系统/子系统分解为更精细的框,以至于无论整个项目有多大,给定的一组变量只能由50-200行代码访问,仅此而已!OO编程显然还有很多,但是,从本质上讲,这就是C ++为您提供将数据/函数声明为私有,受保护或公共的选项的原因。
OO中的第二大想法是抽象层的概念。尽管过程语言也可以具有抽象,但是在C中,程序员必须做出有意识的努力来创建这样的层,但是在C ++中,当声明一个类时,会自动创建一个抽象层(是否由抽象来决定还是要由您自己决定)将添加或删除值)。您应该阅读/研究有关抽象层的更多信息,如果您还有其他问题,我相信这个论坛也将很乐意回答这些问题。