Ale*_*rty 166 c++ objective-c
Objective-C和C++在语法,功能,范例,框架和库方面有哪些主要区别?
*重要提示:我的目标不是在两种语言之间展开性能战.我只想要真实的事实.事实上,我的问题与表现无关!请提供任何可能看似主观的信息来源.
Mac*_*Mac 180
一些主要差异的简短列表:
bool,true和falseObjective-C使用BOOL,YES和NO.void*和nullptr,Objective-C更喜欢id和nil.SEL)作为函数指针的近似等价物.nil与C++不同,Objective-C很乐意让你发送消息,如果你试图调用它的成员函数,它会崩溃nullptrself,并允许类初始化器(类似于构造函数)在需要时返回完全不同的类.与C++相比,如果您创建一个类的新实例(隐式地在堆栈上或显式通过new),则保证它是您最初指定的类型.int foo (void)和int foo (int)定义该方法的一个隐式过载foo,但要达到相同的目标C需要明确的重载- (int) foo和- (int) foo:(int) intParam.这是因为Objective-C的命名参数在功能上等同于C++的名称修改.alloc消息,或隐式地在适当的工厂方法中).在我看来,最大的区别可能是语法.你可以用任何一种语言实现基本相同的东西,但在我看来,C++语法更简单,而Objective-C的一些功能使动态调度更容易使某些任务(如GUI设计)更容易.
可能还有很多我错过的其他东西,我会更新我想到的任何其他事情.除此之外,可以强烈推荐LiraNuna指导您的指南.顺便说一下,另一个感兴趣的网站可能是这个.
我还应该指出,我自己刚开始学习Objective-C,因此上面的很多内容可能不太正确或完整 - 如果是这样的话,我道歉,并欢迎改进建议.
编辑:更新以解决以下评论中提出的要点,在列表中添加了一些项目.
Geo*_*che 32
虽然它们都植根于C,但它们是两种完全不同的语言.
一个主要的区别是Objective-C专注于调度的运行时决策,并且在很大程度上取决于它的运行时库来处理继承和多态,而在C++中,焦点通常在于静态,编译时,决策.
关于库,您可以在两种语言中使用纯C库 - 但它们的本机库完全不同.
但有趣的是,您可以混合使用两种语言(有一些限制).结果称为Objective-C++.
脱离我的头顶:
对我来说,最大的区别是模型系统.Obj-C允许您进行消息传递和内省,但C++拥有功能强大的模板.
每个都有自己的长处.
Objective-C是C的更完美的超集.在C和Objective-C void*中,允许从结构指针隐式转换.
Foo* bar = malloc(sizeof(Foo));
Run Code Online (Sandbox Code Playgroud)
除非void显式转换指针,否则C++不会编译:
Foo* bar = (Foo*)malloc(sizeof(Foo));
Run Code Online (Sandbox Code Playgroud)
这与每天编程的相关性为零,只是一个有趣的琐事.
正如其他人所说,Objective-C在如何看待对象与C++相当静态的领域方面更具动态性.
Objective-C是面向对象语言的Smalltalk系列,它具有与Java,Python和其他"标准"非C++面向对象语言非常相似的对象概念.大量的动态调度,没有运算符重载,发送消息.
C++是它自己奇怪的动物; 它主要跳过了家谱的Smalltalk部分.在某些方面,它有一个很好的模块系统,支持继承,恰好可以用于面向对象的编程.事物更加静态(例如,可覆盖的方法不是默认方法).
| 归档时间: |
|
| 查看次数: |
153996 次 |
| 最近记录: |