C++基础 (杂七杂八的汇总 )
各数据类型在32位系统和64位系统占的字节数:
C类型 | 32 | 64 |
char | 1 | 1 |
short int | 2 | 2 |
int | 4 | 4 |
long int | 4 | 8 |
long long int | 8 | 8 |
char* | 4 | 8 |
float | 4 | 4 |
double | 8 | 8 |
继承:继承就是新类从已有类那里得到已有的特性。 类的派生指的是从已有类产生新类的过程。原有的类成为基类或父类,产生的新类称为派生类或子类。
多态:将基类类型的指针或者引用指向派生类型的对象。多态通过虚函数机制实现。简单概括为“一个接口,多种方法”(接口重用),即用的是同一个接口,但是效果各不相同。
重写(覆盖):是指派生类的函数屏蔽了与其同名的基类函数,注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。
重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。
虚函数(动态调用) 、内联函数(静态编译)不能同时是
https://blog.csdn.net/u011426247/article/details/79767277
extern C
头文件中的ifndef/define/endif作用:预编译文件保护符,防止文件被多次包含,多次定义。
const和define的区别:const有数据类型,宏常量没有。编译器可对前者进行类型安全检查,而后者只是字符替换。
sizeof:只计算在栈中分配的内存大小。
指针和引用的区别 :引用是变量的别名,内部实现是只读指针
数组和指针的区别
空指针和悬垂指针的区别:
悬垂指针:指向曾经存在的对象,但该对象已经不再存在了,此类指针称为垂悬指针
空指针:被赋值为NULL的指针
哑指针:只是一个指向,除此以外不会有其他任何动作,所有的细节必须程序员来处理,比如指针初始化,释放等等
野指针:是指向“垃圾”内存(不可用内存)的指针
智能指针:实现一种垃圾回收机制。为了满足管理类中指针成员的需要;使用引用计数的方式实现
面向对象技术的基本概念:类、对象、继承
面向对象技术的基本特征:封装、继承、多态
C++空类默认的成员函数:构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载、const修饰的取地址操作符重载
static变量:
静态全局变量只初始化一次,防止在其他文件单元中被引用。
静态数据成员在全局数据区分配空间(不在栈中)。
静态函数只能在声明它的文件中可见,不能被其他文件使用。
静态成员变量可以在一个类的实例之间共享。
静态成员函数没有this指针的开销,只能访问静态的函数和变量。
构造函数可以是内联函数
C++编译程序的内存结构:
栈区:由编译器自动分配释放,存放函数参数值、局部变量等
堆区:一般由程序员分配释放。new/malloc、delete/free
静态数据区:局变量和静态变量存储是放在一块,初始化全局变量和静态变量在一块区域, 未初始化全局变量和未初始化静态变量在相邻另一块区域。
文字常量区:常量字符串
代码区:存放函数体的二进制代码
字符数组和字符串的区别:字符串会在末尾自动添加空字符
虚函数表在编译器建立;而对象的隐藏成员(虚函数指针)在运行期构造函数被调用时建立的
https://www.cnblogs.com/yjd_hycf_space/p/7495640.html
const的用途:定义常量;修饰函数的参数和返回值;被修饰的类的成员函数不修改非const成员变量的值
虚析构函数:通过基类的指针删除派生类的对象。否则 不是虚的会引起内存泄漏
内存泄漏
子类和父类的构造函数、析构函数:
析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了。
定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数。
引用:变量的别名;本身不是一种数据结构;不占用内存;不能建立数组的引用;不存在纸箱空值的指针。
常引用
全局对象的构造函数:在main函数之前执行
https://www.cnblogs.com/LUO77/p/5771237.html
不可以同时用const和static修饰成员函数:C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。
const与指针:
const char *p 表示 指向的内容不能改变。
char * const p,就是将P声明为常指针,它的地址不能改变,是固定的,但是它的内容可以改变。
纯虚函数:纯虚函数不能再在基类中实现,编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚函数的类称为抽象类,它不能生成对象。
https://blog.csdn.net/u014796694/article/details/81210868
C++源文件从文本到可执行文件的过程:预处理->编译->汇编->链接
debug和release的区别:
debug:通常称为调试版本,包含着调试信息,便于程序员调试
release:称为发布版本,它往往是经过各种优化,使得程序在代码大小和运行速度是最优的,方便用户使用。
程序崩溃的几种原因:读取未赋值的变量;函数栈溢出;数组越界访问;指针的目标对象不可用
C++编程优化
参考:
https://www.cnblogs.com/Y1Focus/p/6707121.html
https://blog.csdn.net/v_july_v/article/details/7382693( 海量数据处理方法)