注意在构造函数和析构函数中,不要调用任何虚函数,因为他会调用基类虚函数。
C++不像Java和Python有垃圾回收器,也就是由虚拟机来管理内存,程序员只需实例化对象,却不用去释放其占用的内存。C++的内存管理是双刃剑,用得不好就会内存泄漏,耗光系统的所有资源,用得好就可以写出速度很快的程序。
std::stringstream支持<<,并且可以输入各种数字,然后再转为std::string,std::string不支持添加数字。记得包含<sstream>。
C/C++的依赖是通过头文件(.h)和库文件(.lib)编译的,所以编译中出现链接问题,应该从这两个方向入手。在Visual Studio中的项目属性可以查看头文件包含目录和引用的库文件。ps.VS的项目属性非常强大,还可以设置生成的目标文件的目录,以及debug的目录。如图
C/C++的GUI框架QT非常强大,并且是跨平台的。WPS和许多Linux发行版中的桌面软件就是由QT构建。如果只使用标准库可能只会写出学生学籍管理系统这样的黑框框。如果在期末设计中使用QT来实现,我想可以惊呆老师的眼睛。
C/C++经常遇到编码问题,一般来说遇到的为UTF-8和GBK编码,两者在的英文编码是一样的,如果发现英文显示正常,中文乱码,则大概率是把前者当成后者解析了,或者反之。这个时候可以在VS的调试模式中查看变量值,如果发现乱码,那么多半在代码中是UTF-8编码,因为VS默认是GBK的,如果VS中没有乱码,而在程序运行中乱码,那就是运行时把GBK解析为了UTF-8。
总而言之,遇到乱码不要怕,可以先用notepad查看文件的编码格式,再用IDE来调试查看乱码的字符串变量值。也可以使用一些库方法,来看字符串的编码是什么。不要急着用notepad转换文件的编码,因为害怕后面会搞混乱。
.obj或.o文件是由.c文件生成的,一个.c文件被视为一个编译单元,最后由链接器把他们拼装起来。编译的步骤为 预编译->编译->汇编->链接。一般来说编译出错都在最后一步链接,链接出的最多的错就是函数或者变量签名问题,也就是接口出错。
enum color {red, yellow, green};// 代表不限定作用域,enum后加上class代表限定作用域
不限定作用域的结构体会自动地转换成整型,可以赋值给int
int i = color::red;