这是一个简单的问题.
我使用C&C#(2.0)完成了大量工作,但在C++中从未做过任何事情.学习C++时,我可以期待什么不同?我是否应该注意任何重大问题或障碍?有没有人为经验丰富的程序员学习C++的课程书/网站建议?
jal*_*alf 14
我能想到的主要区别是C++远不是C和C#的多范式语言.在C#中,OOP仍然是范例.它之前是OOP语言,如果你没有做OOP,C#社区会告诉你你做错了.(尽管C#在过去几年中也为一些函数式编程提供了很好的支持).
在C++中,OOP是支持的,你可以在你喜欢的时候使用它,但所有的大惊小怪都是围绕通用编程.C++模板允许广泛的聪明,可重用和通用库,并实现许多与旧式OOP相同的目标,但没有大的继承层次结构,并且几乎没有类之间的耦合.标准库包含许多此示例
在C++中,很多C构造虽然仍然合法,但基本上都是避开的:
boost::shared_ptr或std::auto_ptr,或使用引用当然,这些要点中的每一个都有例外,但作为一般的经验法则,与C代码不同,C++代码几乎可以消除对这些内容的所有使用.
而且在C#中,课程确实是很重要的工作.在C#中,一个类只不过是一个脚手架,一个容器来粘贴你所有的方法.当然,它有一个构造函数,它可以实现Dispose(); 但C++更进一步,你有:
析构函数可能是 C++中最重要的概念.对RAII来说至关重要,这就是内存或其他资源的管理方式,因为当对象超出范围时会自动调用它.这允许您的类在C或C#中实现许多无法实现的保证.例如,boost :: thread提供了一个范围锁,当它超出范围时,保证释放,无论函数是否正常返回,抛出异常,还是其他任何东西.因此,在使用此库时,用户不必担心释放锁或其他资源.只要你完成它们,它就会自动发生.
从某种意义上说,这为您提供了更多的钩子来定制您的类的行为.与C#不同,您可以精确控制执行简单赋值时发生的情况.您可以控制当类超出范围,从头开始初始化或作为另一个对象的副本时发生的情况.这使得编写良好的类几乎不可能错误地使用.(几乎)
除此之外,模板和模板元编程是您可能会遇到的概念.它们是非常强大的工具,因此请确保您与他们保持友好关系.:)
以下是我的观点:
HttpRequest在C++中内置类.Interface在C#中没有.您将使用抽象类(和多重继承).您还可以学习C++/CLI,将.NET代码和本机C++混合在一起,以实现两全其美.
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |