摘要:
计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在计算机中可能就变成相等的了 abs( fa - fb) < 0.000001 阅读全文
摘要:
静态类型:对象在声明时采用的类型,在编译期既已确定; 动态类型:通常是指一个指针或引用目前所指对象的类型,是在运行期决定的; 静态绑定:绑定的是静态类型,所对应的函数或属性依赖于对象的静态类型,发生在编译期; 动态绑定:绑定的是动态类型,所对应的函数或属性依赖于对象的动态类型,发生在运行期; 非虚函 阅读全文
摘要:
coredump是程序由于异常或者bug在运行时异常退出或者终止,在一定的条件下生成的一个叫做core的文件,这个core文件会记录程序在运行时的内存,寄存器状态,内存指针和函数堆栈信息等等,对这个文件进行分析可以定位到程序异常的时候对应的堆栈调用信息。 g++ coredumpTest.cpp - 阅读全文
摘要:
以例子进行讲解 #include <iostream> using namespace std; int f(int n) { cout << n << endl; return n; } void func(int param1, int param2) { int var1 = param1; 阅读全文
摘要:
多态: 同一事物表现出不同事物的能力,即向不同对象发送同一消息,不同的对象在接收时会产生不同的行为 重载实现编译时多态,虚函数实现运行时多态 基类的指针指向派生类的对象,指向的是派生类中基类的部分 C++的多态性可以解决基类指针不能操作派生类的数据成员的问题 实现多态的两种方法: 覆盖:是指子类重新 阅读全文
摘要:
对象复用: 设计模式:Flyweight享元模式 通过将对象存储到“对象池”中实现对象的重复利用,这样可以避免多次创建重复对象的开销,节约系统资源。 零拷贝 避免 CPU 将数据从一块存储拷贝到另外一块存储的技术 可以减少数据拷贝和共享总线操作的次数。 在C++中,vector的一个成员函数**em 阅读全文
摘要:
避免内存泄露的几种方式 记数法:使用new或者malloc时,让该数+1,delete或free时,该数-1,程序执行完打印这个计数,如果不为0则表示存在内存泄露 一定要将基类的析构函数声明为虚函数 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 对象数组的释放一 阅读全文
摘要:
类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一些? 赋值初始化,通过在函数体内进行赋值初始化;列表初始化,在冒号后使用初始化列表进行初始化。 对于在函数体中初始化,是在所有的数据成员被分配内存空间后才进行的。 列表初始化是给数据成员分配内存空间时就进行初始化 方法一是在构造函数 阅读全文
摘要:
const关键字的作用有哪些? 阻止一个变量被改变,可以使用const关键字 对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const 在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值; 对于类的成员函数,若指定其为const类型,则表明其 阅读全文
摘要:
C++中的类成员声明static 函数体内static变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; 在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外其它函数访问; 在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使 阅读全文