无人岛屿颈
发表于 2020-12-31 18:58
1年肯定无法“精通”,但是如果认真学能让你基本了解这玩意是个怎么回事,而且最关键的,能够帮助你进入游戏的行业。
上面各种大神的回答,居然milo大神都炸出来了,虽然都很有道理但是我觉得答案依然因人而异。
这个东西没有什么答案,而更加取决于你想做什么。
你想成为一个程序员,还是更想成为一个游戏开发者,游戏设计师或者,或是只是喜欢游戏而想呆在游戏的圈子里。。。
游戏是一个很大的产业,每个环节都是可以做到最大最强从而改变世界的,而且每个环节都是密不可分没有什么孰优孰劣的。
上面不少回答角度是从资深程序员的角度来说的,但我个人认为开发一个好的游戏编程技术的重要性其实并不是最最重要的。美工,设定,故事背景,营销和项目管理方面都是非常重要的环节,相比之下程序的重要性有的时候并没有想象的那么重要。 这也是为什么很多人认为不懂编程也能做游戏的原因。有的游戏比如卡牌游戏,甚至不需要任何程序。
并且另一方面,对于玩家来说,他们只知道这个游戏是不是好玩,爱不爱玩,对于用的什么引擎,
你c++写的多厉害根本都是没有直接影响的。比如说minecraft这样的游戏也没有用到高大上的引擎,dota这样风靡世界的游戏当初也是用的魔兽争霸编辑器那个自带的脚本编辑器完成的。
另外涉及到游戏引擎的方面,也并不是如某些人所说,直接用别人的引擎的人就没有任何技术含量的。
第一,为自己的游戏开发专用的游戏引擎其实也并没有那么困难,只是涉及到的知识和需要的编程技术基础比较高,而且通常没有绝对的必要性,所以做的人不多,就好像你想盖房子会自己去造吊车吗。所以以上说国内游戏开发不好是因为没有好的吊车其实是不对的。
第二,往往大家把游戏引擎和好的游戏画面联系在一起,但其实好的游戏画面并不由引擎决定,就好像photoshop是一个创建图片的工具,但是有的人能用ps创造出惊人的作品,而有的人只能胡乱的涂鸦,同样的工具而最后产生的效果也可能是完全不同的。现在无论什么游戏引擎大部分都是基于当前已有的dx或者opengl图形渲染技术,就算某个引擎能够同时渲染更多的多边形,也不能代表其画面效果好,因为这些其实是取决于使用引擎的艺术家和技术美工的。当然如果一个游戏引擎的编辑工具非常的aritst friendly,对于画面的提升帮助是很大的。(于是问题便从开发游戏引擎变成了开发游戏引擎编辑工具)
第三,如何巧妙的利用游戏引擎也是一个非常有技术的事情,比如dota用的魔兽地图编辑器,弱到连让一个单位眩晕固定的秒数的功能都没有,所有的眩晕都是要靠创建一个隐藏的单位向敌人丢出一个隐藏的风暴之锤来实现的,即便如此,别人还是做出了一个非常成功的游戏。这样巧妙的利用一个引擎的各种功能,从而达到自己的设计目的,也是非常有技术含量的一件事情。在我眼里他们这些游戏程序员的工作并没有这些引擎程序员的工作低级,歧视他们的技术含量是可笑的。
另一方面,技术大部分的时候是因为需求而生的,比如我的游戏需要一个特殊的效果从而能够过表现某种艺术效果,但目前的市面上的引擎没有这样的功能(比如我想要我的游戏里任何东西都和果冻一样,并且有物理的效果), 那么这个时候熟练C++编程能力就变得非常的重要,因为涉及到修改原引擎功能的二次开发往往是使用c++的,并且对于各种优化的要求相当的高。(当然如果做不到,那么巧妙的修改设计方案避开这是永远存在的解决的办法,当然结果也是这将使得游戏变得平庸)
但是总的来说,花一年时间尽可能深入的学习c++是十分必要的,即使你今后不使用c++作为自己的编程工具。因为c++是目前大部分编程语言的基础,了解这些细节对于今后快速掌握另一种语言也是非常有益的,我c++水平不是大神,但我也能做到在从来没有看过任何java/c#的书籍的情况下看懂大段的java/C#代码并且自己写出一些常用的功能。
如果真的想从事游戏行业,在学习c++之外更重要的是,你需要尽早开始着手做一个你想做的游戏,无论多差先做出原形来,无论用什么样的办法多落后的技术,在中间你还会学到无数编程之外的东西。编程这个东西,一旦编程技术达到一定的水平,剩下的在编程语言之外的思想才是更重要的,就好像有的人写作的词汇特别的美,语法特别的对,但是内容空洞无力的话也是没有任何价值的。
墙和鸡蛋
发表于 2020-12-31 18:59
去年刚参加完校招的来回答一下,我本身语言也是 C++,走的是 Linux C/C++后台开发方向,拿到过百度、腾讯、字节等大厂offer
目前来说,C++主要场景在Linux C++ 后台开发、游戏开发、PC客户端开发(qt等)、工业软件、实时推荐系统、搜索引擎、流媒体服务、还会有分布式系统方向做一些infra开发。
而对于大多数人来说 C++ 后台开发是最容易达成的,目前后台方向,Java岗确实远多于C++岗。
但从收到的简历数量来说,Java 的简历是远远多于C++,也侧面说明了 C++ 岗其实竞争比 Java 岗小很多。
一年时间掌握 C++ 肯定是足够的,当然了,这里的掌握仅仅是指熟悉 C++ 常用特性,能用 C++ 写出正确且符合规范的代码,连精通的门都还没进,精通 C++ 也不是谁都敢说的,确实博大精深,特性繁多,支持好几种编程范式。
那么如何循序渐进的学习 C++,并且通过大厂面试呢?
C++语言知识
这里首先说下语言基础知识,一些关键字和实现原理等
首先是入门阶段,除了基本的循环、变量、判断以外,至少需要掌握这些:
指针、引用、数组、内存C和 C++ 的一些区别,比如 new、delete 和 malloc、free 的区别C++中引用与指针区别继承多态: 动态绑定,静态多态C++里一些关键字的作用:static、const、volatile、extern类初始化等
这个阶段以看C++ Primer 前 12章为主。
接下来可以逐步学习现代C++(C++11以后)、并且学习一些C++底层实现原理,如:
C++ 重写、重载虚继承、菱形继承等C++虚机制:虚函数、虚函数表、纯虚函数C++11 部分新特性,比如右值引用、完美转发等智能指针原理:引用计数、RAII(资源获取即初始化)思想智能指针使用:shared_ptr、weak_ptr、unique_ptr等类型转换:static_cast, dynamic_cast, const_cast, reinterpret_castSTL大部分容器的实现原理,如 vector、deque、map、hashmap模板特化、偏特化,萃取 traits 技巧程序编译链接机制、内存布局(memory layout)、对象模型
可以通过看这些书去学习:
Effective 系列:《Effective C++》、《More Effective C++》、《Effective STL》,这部分是提高C++编码能力《STL 源码剖析》和《深度探索 C++ 对象模型》,这是了解STL容器底层实现和对象模型,面试常考
视频可以看看侯捷老师的:
可以在 B 站搜索「候捷 C++」,主要会有以下几个系列视频:
《C++ STL与泛型编程高级》《C++11 新特性》《C++内存管理》《STL源码分析》
看完上面这些书(不是挨着看,有些可以挑关键章节),会让你对C++比较理解比较透彻,运用更加熟练。
当然了,如果是自学C++的话,会比较困难,主要是C++语言本身很难学,最好能够有老师带着学,这里推荐一个ACM金牌大佬的免费C++课程,可以体验一下:
上面提到的C++这些书,我帮你整理了一部分,有需自取: 百度网盘: https://pan.baidu.com/s/10xx2Zk8xSgBTrnhAu2HgpQ提取码: wt2n
C++ 开发岗位,除了需要掌握 C++ 以外,还需要掌握那几门计算机科班必学的课程。
计算机基础知识:
计算机网络:
需要掌握的网络协议和知识:
HTTP、TCP、IP、ICMP、UDP、DNS、ARP
HTTPS安全相关的:数字签名、数字证书、TLS
常见网络攻击:局域网ARP泛洪、DDoS、TCP SYN Flood、XSS等
其实我们工作中就特别重视安全,上线新的对外服务前都要经过安全扫描,安全是生命线。
IP地址、MAC地址、OSI七层模型(或者 TCP/IP 五层模型)
TCP的重点知识:
状态转换:三次握手、四次挥手拥塞控制、快速重传、慢启动等TCP 状态中 TIME_WAIT
学习过程中也要多思考为什么要这么设计,这里列几个问题:
TCP 如何实现可靠传输的(画外音:如何基于 UDP 实现可靠传输
第二次和第三次之间的等待是什么
为什么不是四次握手
TIME_WAIT 的存在解决了什么问题,等待时间为什么是 2 MSL
TCP 连接建立为什么不是两次握手(画外音:三次握手的充分必要性说明
最后别忘了自己复述一遍那被问烂了、写烂了的问题:
从 URL 输入到页面展现到底发生什么?
推荐书籍:
《网络是怎样连接的》《计算机网络:自顶向下方法》《TCP/IP详解卷1:协议》《图解HTTP》
操作系统知识
一些复习的思路:
操作系统由哪些构成进程和线程的区别线程的实现方式(一对一、多对一等)页面置换算法进程的状态、切换、调度进程间通信方式(共享内存、管道、消息)互斥与同步(信号量、管程、锁)死锁检测与避免为什么需要虚拟内存,MMU 具体如何做地址转换的内存为什么分段、分页并发经典的问题:读者写者、哲学家就餐问题文件系统是如何组织的虚拟文件系统(VFS)是如何抽象的
书籍推荐:
《现代操作系统》《操作系统—精髓与设计原理》《Linux内核设计与实现》
网络编程和服务器开发
重点知识:
Linux 下网络编程核心的包括网络 IO 和系统编程两个部分:
进程间通信方式: 信号量、管道、共享内存、socket 等五大 IO 模型:同步、异步、阻塞、非阻塞、信号驱动高性能 IO 两种模式:Reactor 和 Proactor( 但是 Linux 下由于缺少异步 IO 支持,基本没有 Proactor多线程编程:互斥锁、条件变量、读写锁、线程池等IO 复用机制:epoll、select、poll(破解 C10K 问题的利器)
推荐的书:
《Unix网络编程》《Unix环境高级编程》《Linux高性能服务器编程》《Linux多线程服务器端编程》
网络编程练手小项目推荐http server:
HTTP 服务器,熟悉http协议的解析和网络编程
这里推荐一个做为参考:
https://github.com/imarvinle/WebServer: 这是我看完高性能服务器编程后写的,欢迎star~
系统知识
推荐书籍:
《深入理解计算机系统》《程序员自我修养》
算法于数据结构
算法的话刷题是必须的,这里推荐一份谷歌大佬的刷题笔记,讲解刷题的框架思维,对我很有帮助,墙裂推荐:
编程指北:看完谷歌大佬的Leetcode刷题笔记, 我直接手撕了200道Leetcode算法题重点数据结构:
线性表、数组、链表
栈与队列、堆
散列函数和散列表
树、二叉树、多叉树实现和遍历方式,AVL树实现以及插入删除过程、红黑树(了解定义即可)
图,以及图的实现方式、遍历
B树、B+树
常见的算法:
排序算法:冒泡、插入、堆排、基数、快速、希尔、归并等常见算法思想:递推、分治、贪心、递归、枚举、动态规划等字符串匹配算法:KMP
书籍推荐:
《啊哈算法》《算法图解》《算法第四版》
刷题网站推荐:
牛客网leetcode各种OJ
其它还包括数据库、系统设计、Redis这些组件的知识,我就不一一列出来了。
至于游戏开发,可以去看 Milo 大神推荐的游戏开发入门到进阶的路线。
当然了,如果是自学C++的话,会比较困难,主要是C++语言本身很难学,最好能够有老师带着学,这里推荐一个ACM金牌大佬的免费C++课程,可以体验一下:
如果觉得,分享有用的话,记得关注我 <a class="member_mention" href="http://www.zhihu.com/people/30f506bc4f6d30f9bab938d991202016" data-hash="30f506bc4f6d30f9bab938d991202016" data-hovercard="p$b$30f506bc4f6d30f9bab938d991202016">@编程指北 ,帮我点个赞哟,笔芯~
飘渺九月
发表于 2020-12-31 19:02
C语言与C++学习路线
1、过:学习一门新的语言,第一步就是把它所涉及的基础知识大体过一点,不求深解,只求了解——第一遍:无需了解太过深入的理论,大体知道这门语言是什么样的,主要面向哪些场合,一些基本的语法格式是什么样的就可以了。
2、抄代码:刚开始写代码,没有多少人一上来就能立刻自己写一个很完善很强大的代码,甚至连基本的语法都会写错,这时候抄代码就很关键了,从书上抄,从例子里抄,边抄边想,边想边回忆语法。
3、模仿改:自己会抄写一些简单的代码,熟悉了一遍此语言的简单语法后,但还不太清楚怎样下手写一个完整的代码模块,所以这一步要仿写了,仿照给出的代码写一个属于自己的代码
4、勤调试:没有人能一下子写出完全正确的代码,自己试着写一些代码,通过不断调试来验证自己的一些想法,继续思考,再次验证,来回折腾。熟悉一些基本的调试工具以及调试方法。
5、看n遍:出错或遇到问题时,将代码从头看到尾,看了一遍又一遍,直到快全部记住时,总能找出问题原因,相信方法总会比问题多
6、练重复2-5步三遍以上,不解释。
7、创新拿出一个完全没有写过的代码,根据要求,一步步的写出来。如果写不出来,或者中间一堆错误,请参考第六步。
8、悟:主动找到写代码的感觉和成就感,并保持下去,世界上最难的语言就掌握了,将成为你软件生涯永远的工具。
常见常用的IDE开发工具
诸如Windows平台VC系列:VC++6.0(比较古老) ;Visual Studio2013, Visual Studio 2015,Visual Studio2019;Mac平台的XCode系列,还有CodeBlock,另附一些高级编辑器Notepad++,EditPlus,UE等一些开发工具的常用设置和一些常见快捷键的使用。
C++第一阶段
数据类型、变量、内存布局、指针基础;字符串、一维数组、二维数组;一级指针,二级指针,三级指针,N级指针概念,指针数组和数组指针;结构体、文件的使用;动态库的封装和设计;函数指针回调函数。
C++第二阶段
面向对象编程思想;
类的封装,构造和析构、静态成员、对象管理;类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;对象动态管理、友元函数、友元类、操作符重载;C++编译器对象管理模型分析;类对象的动态管理(new/delete);友元函数和友元类;运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载);
类的继承、多继承及其二义性、虚继承;多态(概念、意义、原理剖析、多态案例);虚函数、纯虚函数、抽象类(面向抽象类编程思想案例);函数模板、类模板,模板的继承;C++类型转换;C++输入输出流(标准I/O 文件I/O 字符流I/O);C++异常处理(异常机制、异常类型、异常变量、异常层次结构、标准异常库);
C++第三阶段开发进阶
这一阶段的目标才是达到C/C++软件工程师开发行业的基本要求,这个阶段是我们走向C/C++开发的进阶之路,更是一个让自己找份薪水比较体面的工作的筹码。
如果在此部分遇到不懂的或者没有见过的知识点和名词,可先将本文收藏,供以后细细研读。
那么这个阶段,我们又应该掌握什么呢,继续往下看:
1.C++进阶之STL
STL = Standard Template Library,即标准模板库。这是提高开发效率的极品工具。通过学习此阶段,应掌握泛型编程技巧,理解容器类在C++语言中的应用模式,以及熟练掌握全部STL类的使用方法。
2.C++进阶之设计模式
决定一个项目成败最重要的因素是项目总体的设计,通过本阶段的学习,可掌握面向对象编程中重要的一环,是编码前建模的技巧所在。单例模式;工厂模式;代理模式;迭代模式等,这些都是你要掌握的哦。
3.C++进阶之数据结构基础
这是所有编程语言中最应该学习的部分,程序组成的基础之一。
顺序存储、链式存储、循环链表;双向链表、栈(顺序和链式)、队列(顺序和链式);栈的应用、树基本概念及遍历、二叉树;排序算法、并归算法、选择、插入、快速、希尔。
4.C++进阶之UI界面开发
掌握QT类库构架,图形界面开发模型;掌握QT开发技巧,消息机制,图形处理;掌握QT网络编程,UDP,TCP使用方式;掌握QT文件处理方式,序列化;掌握QT在windows,linux,ios,android不同平台下的移植技术。
5.C++进阶之Unix/Linux网络服务器
掌握Unix/Linux平台开发方式;熟练使用系统调用;熟练Unix/Linux内存管理,进程,线程调度;熟悉网络服务器开发方式,熟练编写TCP,UCP网络服务程序;掌握同步/异步IO模型在网络编程中的使用方式。
⑥ C++进阶之数据库开发
掌握SQL语言的实用技巧。Oracle,MySQL数据库的使用方式。
如果你能熟练掌握以上列出的技能,具备解决复杂问题和技术难点的能力,而且你能独立开发一些比较复杂的功能模块,那么很荣幸地告诉你,你已经达到中级水平,薪资过万对你来说简直是小菜一碟。
书本推介:
《Essential C++》
是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。
《C++ Primer》
李普本书对C++基本概念、技术、以及现代C++编程风格进行了全面而且权威的阐述,是C++初学者的最佳指南;本书可以帮助你编写实用的程序,而无需首先精通每个语言细节。对于中高级程序员,本书也是不可或缺的参考书。
《Effective C++》和《More effective C++》
作者是Scott Meyers。你应该熟读它们,并清楚地理解每个项目。该书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。
《Inside the C++ object model(深度探索C++对象模型)》
本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承,帮助你理解程序的底层实现,以便写出更高效的代码。
《The C++ standard library(C++标准程序库)》
《Thinking in C++(C++编程思想)》
C++ 领域权威著作,介绍了C++实用的编程技术和最佳的实践方法。
视频:B站
思维导图
思维导图来源:<a href="http://link.zhihu.com/?target=https%3A//www.jianshu.com/p/1480cbf8891e" class=" external" target="_blank" rel="nofollow noreferrer">https://www.jianshu.com/p/1480cbf8891e
塞翁364
发表于 2020-12-31 19:05
居然没看到那张图,真不合理。
他们都在打击你,让我来告诉楼主真相:根本不需要1年,21天就能精通C++!
风吹吹蛋蛋疼风w
发表于 2020-12-31 19:10
你想做游戏还是精通C++,你是想学会制作游戏的工具的工具,还是去做游戏?
赞成目标驱动,比如说,我的目的就是做出有意思的游戏,而不需要为了做游戏去研究CPU的架构,研究汇编,研究C++,我只要能用就行,我管他是U3D还是COCOD2DX,什么API调用方法,我管他是不是大神们的一时恶趣味,和我无关,这套不好我换一套,我的目的只是一个,把心中的想法实现出来,你们只是我的工具.
你是要精通C++,还是要做游戏,这是两条线,对于绝大多数的普罗大众非天才而言,不可混为一谈.
----
在设计制作游戏的这个过程中,你也许会学到很多东西,甚至也许能开始接近问题的本质,这两个方向会开始模糊化,也许最后会天下大同,但这两者是有区别的,出发点完全不同,对于太过遥远的事,还是更多的着眼于出发点会更合理一些.
敢想敢做敢拼
发表于 2020-12-31 19:15
楼主提出了两个问题,1如何在有限时间(1年)掌握c++;2是否有可能精通。
这个题目从表面看,有些功利主义。就精通一词来说,很显然不太现实。
而且当我们这样谈论c++的时候,它非常的笼统和抽象!所以掌握和精通c++这个命题就抽象了。因为我们不知道你的目标是什么,是掌握语言本身,还是能把这门语言应用于应用开发之中。这里面的差别还是蛮大的。前者,比如说,你去做一个c++语言的教师,传授别人。后者,比如你要用c++开发各种应用,在各种现实的工程中使用。那涉及的就不仅仅是语言而已了。
就单纯的说c++语言,这门语言也是要复杂太多。虽然,你可以理解为c++只不过相对于c引入了类的概念,但是随着oo的引入,实际上额外引入的很多细节和复杂性是成倍翻升。这可不是简单的线性关系。由于c++的宗旨为运行时高效,而不是开发时和编译时高效,所以这导致这门语言的复杂性和学习难度无任何目标上限。。。从而导致c++感觉要比其他语言难学,因为他不对灵活性和复杂性有任何限制,所有的目的都是为了强而强,为了高效而高效,为此可以不惜一切代价。学习和开发成本?不在考虑之列。
显然的是c更简单更容易掌握,和c++在效率上可以认为是一致的(c++不会考虑牺牲性能来换取开发的便利性)。但是语言要不要引入oo,当然要了,因为这是编程思维和分工的一种转换。换句话说,引入oo可以提高程序员的在思维和模型上的控制力。当然也引入了程序结构的复杂性。c++难学的很大一点,在于内存管理由程序员负责和干预,这造成太多你必须顾虑的地方,给程序员带来太大的学习成本和开发时的负担,比如在c语言里,可能对内存的管理是非常让人感到困扰的,在c++里引入了 stl 容器可以适当降低这种困扰,但实际上还是有大量的需要你考虑的东西,导致c++的共享和使用,往往你不仅需要学习和知道接口的定义,还需要你对对方内部的实现本质有一定了解。换句话说,你买了一台电视机,除了用户使用说明书要读,有时候还需要你把它拆开看看内部的电路原理图,你才能使用的准确,正确。这些麻烦事都是拥有gc和屏蔽内存管理的语言完全无法相提并论的,当然也是c++为什么高效的重要原因。
随着硬件发展和技术发展,在虚拟内存技术的帮助下,可以分配出上G的内存,所以困扰主要是对内存管理和使用的严谨和准确。
当然这也是你学习阶段和工业阶段的很大的区别,后者比前者要求的严格和高。在写24x7的服务性质的代码就更加如此。
但是能学到什么程度呢,掌握,精通?这个概念本身就够主观。想必也不容易定义。是你自己的感觉。知乎有个问题就是为什么对c++不能用精通这个词呢?谁知道呢,事实上就是使用c++的人,大家都不会再提自己对c++到底是个什么程度,因为反正没有人能精通全貌,大家都在各自偏好的领域内研究,也就没必要提了,为什么呢,因为领域涵盖的土地太大了,你很难说你把每一平方英寸的土地都挖地三尺了,也就没必要说了。大家奋斗一生,发现也只不过在自家的小片土地劳作而已。
楼主提出了一个想法,想开发游戏。想法很好,但这也具有一定功利性。因为,诚然,游戏是所有领域中比较炫目的,比较酷炫的,他好像明珠一样耀眼。但是我也想提醒大家要稍微冷静客观的想一想,游戏,并不是开发领域的全部,甚至,它只是一小部分,甚至,它的前景并不能称之为乐观和光明。换句话说,要做到一个被用户接受的游戏,那是非常困难达到的境界。这远比做出一个游戏还要更难。这就好像竞技体育一样残酷,成功的游戏总是屈指可数,而且也大部分是来自集体智慧的结晶。我以前有个网友,他因为做过一段时间的 GIS,所以他给我的感觉就是这辈子只搞 GIS,我对他这种给自己主动设限的做法并不是很赞同,我主张作为一个开发人员,你要有自己的兴趣和领域,但也不要给自己设定这样的局限,我就是会这个,别的不考虑。实际上大家还是要开阔自己的视野,要知道你的技能越是底层,你的技能就越成为体现多面性的应用领域的基础和根基,你越不应该将自己局限在某一个具体领域,让自己的路变得狭窄,而是让你的技能发挥作用,更加通用的为更多领域服务。
这个世界上并不是所有人都热衷于打游戏,所以游戏是开发领域的一颗明珠,但他不是全部。在游戏以外,同样也是有很大领域的价值土地的。我本身并不是对游戏开发有任何看低的看法,实际上,我并不打算要去开发游戏,但我长期以来都在打算去学习directx,opengl领域的学习,我必须承认,我们本身应当不断的攀登高峰。
最后,我们客观的评价c++,就是这是一门性价比(学习成本和回报之间)非常低的语言。只有真正对他有兴趣的人,值得去学习和研究它。否则,因为它的超低性价比,你基本一定会半途而废。
忆困血馆闻
发表于 2020-12-31 19:22
《21天精通c++》
六翼天使494
发表于 2020-12-31 19:22
C++与其他语言都一样.写的多了就明白,都是抽象一些类型与接口.使用继承和虚函数 c语言通过结构体嵌套来实现继承.使用包含函数指针成员的结构体实现虚函数.继承与虚函数实现不同状态与行为,当问题规模巨大,知道分层管理,就像哈希表如果某个节点冲突过多 可以用不同函数进行二次哈希.就像红黑树太复杂,就用跳表加随机分层处理.就和中国行政区 国-省-县.起码我认为c++与c差不多. 接下来你可能需要语言之外东西 常识数据结构 操作系统 编译原理.这些可能永远也学不完.边学边用吧 庄子有云.我生也有涯,而知也无涯,以有涯随无涯,殆矣.顺其自然,不要把自己搞的太累了.像现在很多快餐培训,打了鸡血一样,看看就算了.
我是的十八簿
发表于 2020-12-31 19:24
如果有足够的精力,一年的时间掌握基础的C++还是绰绰有余的。
推荐先看一看Andrew Koenig的Accelerated C++,基本上就能入门了。
然后就可以买一本C++ Primer当工具书翻着看,这时候就可以自己找个项目做一做了,边做边学,从工程应用中找到自己知识的空缺并进行补充。
做那么一两个工程之后就可以买Ruminations on C++,Effective C++这些书来补充一些C++的零碎知识。
到此为止,你已经大概掌握了基础的C++,看一些设计模式之类的书,找两个项目做做就好了。
重点就是一定要不停的练啊,越大的项目越能够锻炼一个程序员的能力。
如果到了这里,还想多学一些,可以读C++ Templates学习一下模板元相关知识,可以读STL相关书籍补充一些库开发的知识。本人目前就在这个阶段,基本上到这里就会遇到学习壁垒,也没必要死磕往上继续学了。本人高中生一枚,初二开始学C++,三四年以来摸爬滚打摸着石头过河,也算是找到了一条比较好的路子。不过因为我个人也没上过大学,不了解大学中的环境,也请各位看官依照自己的情况来选择自己的道路,本人经历仅供参考。
个人拙见,请各位前辈多多指导。
幸福341
发表于 2020-12-31 19:33
掌握可以,但别说自己是精通。
游戏脚本一般用不到c++,引擎需要用c++来写。