这里有两个问题,一个是C和C++的区别和联系,而是如何进行应用软件开发。
C++比C语言更复杂,也完全兼容C的语法,不仅提供了面向对象的特性,还加入了模版元编程,直接把复杂度提升了一个档次。但也别有畏难情绪,C++的基本语法都很简单,包括模版,主要是看熟练程度,有些东西也不用刻意去学,包括一些语法糖,实际项目中很少用到,所以那些说C++怎么怎么复杂,怎么怎么难学的,听听就好别当真,可以说只要掌握面向对象,了解基本的模版编程,熟练使用stl或boost(里面的东西不需要全掌握,只掌握重点的容器、算法,boost的asio就可以了),就可以开始工作了。
软件开发这个话题太广,如果你熟悉了C/C++,到了这个阶段,就可以熟悉各种API了,如win32或posix等,比如可以看Windows程序设计或Linux程序设计等这类书籍。
就目前来看C\C++的路的确越来越窄,桌面开发可以选择Qt,但是windows还是推荐使用.net,C++仅作为备选方案,随着互联网和云计算的盛行,C++在这方面基本没什么用武之地,本来以为可以在物联网上大展宏图,结果半路杀出一个python,随后连Ubuntu都将其作为官方开发语言,这也是一个悲伤的故事。
但对于嵌入式工程师,C/C++这个目前还无法替代,而且门槛极高,要熟悉Linux架构,会对内核进行裁剪,要为特定硬件编写驱动,需要丰富的软硬件知识积累。
游戏目前主流的编程语言是C#,各大主流的商业游戏引擎,如unity,cryengine等都使用C#,目前只有unreal4采用的C++,当然unreal4也可以采用蓝图。像前几年盛行的cocos2dx也是采用C++,但目前基本已经淘汰了。
游戏编程对数学能力要求较高,首先需要掌握高等数学和线性代数等理论知识,然后看一些计算机图形学的相关知识,伴随着这些理论知识的学习掌握相关的图形api,比如OpenGL或directx,如果是从事移动端,需要学习opengl es,而OpenGL es是在OpenGL上精简而来的,抛离了OpenGL中的固定功能管线,采用可编程管线,即shader(shader是一种类c语言,语法很简单,但需要一定的数学功底才能写好),所以要重点学习OpenGL 3.0以上的版本。在这之后就可以开始学习游戏引擎了,有了上面的知识,游戏引擎就想对简单了,就相当于使用ide。