是C++;不是一种完全面向对象的语言? 我知道在OOP中,我们必须声明一个类,比如java中的变量、函数等,但是C++中我们也可以在类外声明。 这就是C++没有完全OOP的原因吗?或者还有别的吗?

是C++;不是一种完全面向对象的语言? 我知道在OOP中,我们必须声明一个类,比如java中的变量、函数等,但是C++中我们也可以在类外声明。 这就是C++没有完全OOP的原因吗?或者还有别的吗?,c++,C++,完全定义OOP?人们可能有多少种意见就有多少种 注意,就纯度而言,IIRC所有具有ValueType的语言都不是严格意义上的“纯”。不,拳击不算 多年来,在讨论中,我试图回到OOP的核心功能: 身份 分类 多态性(不是继承,因为某些OOP没有继承) 封装 因此,如果你能判断两个类是否不是同一个类(标识),你可以做一个经典的“鸭子嘎嘎”和“狗吠”的例子(来演示继承/多态性和分类),你可以隐藏字段,你就差不多做到了 但是,将其应用于所有语言更为困难。虽然我确实大致了解了函数式编程,但我对它们近乎

完全定义OOP?人们可能有多少种意见就有多少种

注意,就纯度而言,IIRC所有具有ValueType的语言都不是严格意义上的“纯”。不,拳击不算

多年来,在讨论中,我试图回到OOP的核心功能:

  • 身份
  • 分类
  • 多态性(不是继承,因为某些OOP没有继承)
  • 封装
因此,如果你能判断两个类是否不是同一个类(标识),你可以做一个经典的“鸭子嘎嘎”和“狗吠”的例子(来演示继承/多态性和分类),你可以隐藏字段,你就差不多做到了


但是,将其应用于所有语言更为困难。虽然我确实大致了解了函数式编程,但我对它们近乎无限的行话还没有足够的训练来判断那些正在涌现的函数式oop命令式混合体,

哈?C++是一种混合的、多范例的语言。它当然不是一种“纯”的面向对象语言,在这种语言中“一切都是对象”是正确的。C++支持类、对象、封装等,但是由于它也或多或少地与许多C代码向后兼容,所以它不能是“完全面向对象”。

< P> C++中,你没有使用< OP >强> >代码,你可以选择不使用它。尽管如此,它是“完全OOP”,但OOP只是不需要。<>代码>主体()//>函数不在类内,因此,可以认为C++不是完全OOP。

< P>面向对象编程不是语言的定义,而是程序设计的定义,程序。也就是说,C++中的一个程序可以是OOP,而另一个程序可以不是OOP。p> <> P>可以说,C++完全支持面向对象编程的编程方法。

< P> C++不完全OOP的原因之一是与大量C代码的向后兼容性要求。内置类型不是C++中的对象,因为它们是不太有效的。请记住,C++的第一个目标受众是现有的C程序员,效率是一个极大的关注点。 <>但是,C++支持OOP的所有<>强>重要/强>特性。p>
相关链接:

甚至java都不是完整的OOP语言。

在真正的OOP语言中,一切都是一个对象、条件、循环等等。

尽管这个问题的措辞有点难看,但我对所有已经证明的答案并不满意。 我倾向于认为语言是“支持范式”而不是“处于范式中”。 那么,什么时候一种语言支持范例呢?当很容易编写满足范例要求的代码时。 人们是如何得出这个结论的?考虑实现Linux文件系统的风格。C代码显然具有OO属性。所以,你不认为这个代码是OOP,因为C不是OOP语言吗?我不这么认为。(我想有些人会理所当然地不同意,因为这似乎是一种意见分歧。) 这对C++意味着什么?当然,C++有很多便利性,使它更容易以面向对象的方式进行编程,但它也为您提供了许多方式来强奸范式和编写看起来OO的代码(因为您使用类、继承私有变量),但完全违反了其他一些OO原则(例如,单责任、开放封闭、统一访问)。
<> P>我认为C++在某种程度上支持面向对象的范式,但明显地不如现代的OO语言。

OOP的主要概念是,在面向对象的编程语言中的每个成员都应该在类内定义,而在C++中,<代码>主< /C>函数被定义在类之外。这就是为什么C++不是完全面向对象的编程语言。

我甚至猜测意见>人。很可能。。。多年来,我的想法有了一些改变:)@Adrian:特别是如果其中一些人有不止一个用户:)根据你的推理,这里认为Java是三种范例语言,Java也不是完全面向对象的。关于int,甚至没有任何远程对象y。main()位于类中只是一个黑魔法。如果你真的想要纯OO,那就去Smalltalk贫民区吧:-)这是开发者的选择。如果需要的话,C++可以是纯OO。但是如果OO没有覆盖所有的需求,那么你可以使用C++支持的其他范式。如果你得到这个评论,请再次阅读PaxDabo的评论。它是值得的。除了C++不要求main是一个函数。@尼尔:那么你还能声明main()吗?你不能声明main。编译器被允许在它认为合适的时候实现它。也不允许调用它(与C不同),因为它可能不是一个函数。可以说Java不完全是OOP,因为它支持值类型。如果完全OOP==“一切都应该是对象”,那么是的Java也不完全是OOP。在我看来,“一切都应该是对象”是定义OOP的一种松散方式。请注意,valuetype参数只是我从UUG中类似的内部辩论中知道的一个参数。不一定是我的意见。我知道问题出在问题上,而不是答案。C++满足了充分的面向对象原则,完全符合OOP。我一直认为valuetype参数只是一个技术性问题或一个实现决策。它让Java和C的人都很紧张:-)正如C示例所示,OOP建模和OOP语言不是一回事。你有那些面向对象原则的参考资料吗?我只能找到上面列出的那些。人们总是“本着OO的精神”添加功能,但这也可以为他们自己如此完美的语言创造一个独特的卖点