gpt4 book ai didi

c++ - 过程程序和面向对象的程序有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 12:46:18 25 4
gpt4 key购买 nike

我对编程还很陌生,但我一直在阅读 StackOverflow 上关于各种编程方法的一些有趣的讨论。我仍然不是 100% 清楚过程编程和面向对象编程之间的区别。听起来面向对象编程仍然使用过程(方法),但一切的组织方式都不同,因为对象是节目的主角。但在我看来,程序仍然允许你做所有相同的事情。就像在 C 中一样,您可以将所有类似的过程放入一个库中。所以你真的不能说 C 中的库类似于 C++ 中的对象吗?

最佳答案

在程序化程序中,代码为王,数据为从属。换句话说,您的程序对数据起作用,而且它们通常没有紧密绑定(bind)。

在 OO 世界中,对象是最重要的东西。一个对象由数据允许作用于该数据的代码组成,它们之间的联系非常紧密。就是封装的概念,信息的隐藏。

举个例子,假设你有一个数字,你想把它加倍。这样做的程序方法是:

n = n * 2

这里的代码非常明确地将 n 乘以 2 并将结果存储回 n。

这样做的OO方式是向数字对象发送一个“消息”,告诉它自己加倍:

n.double();

这样做的好处叫做多态性。当您决定要能够将“bob”之类的字符串加倍时会发生什么。在程序世界中,您必须提供更多代码来进行加倍,但您还必须以不同的方式调用该代码。

使用 OO,您可以创建一个字符串对象,该对象也可以接收“双重”消息。将字符串加倍的代码属于字符串对象,因此它知道它必须与数字对象不同。如果它决定 "bob"* 2 是 "bobbob",那么代码将类似于:

class number:                    class string:
int n char array s
procedure double: procedure double:
n = n * 2 s = string_join(s,s)

然后,无论 x 是什么实际类型(数字或字符串),您都可以调用 x.double(),它会知道要运行哪个代码 - 这大大简化了您的代码。您可以在显示器上加倍整数、字符串、矩阵、复数、实数、窗口大小以及各种不同的东西。

你是对的,可以让 C 库看起来有点像对象。经典的例子是 stdio.h - 你从不关心 FILE* 实际上指向什么,只关心它的行为以某种方式。 FILE*fopen()fclose()等函数是代表C语言I/O能力的一类。

关于c++ - 过程程序和面向对象的程序有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/530741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com