小菜鸟记录下学习C++的笔记,应该为十分基础的内容~
编译时可以加 -D 来追加#define.
eg: cc -DDEBUG main.cpp //相当于在main中添加了一条#define DEBUG
但是在大型项目中一般手动添加打印开关更方便
#ifdef __cplusplus
extern “c”
#endif //判断为C++程序则添加 extern “c”
常用的预定义:__FILE__ //正被编译的文件名
__LINE__ //执行的行数
assert()是C语言标注库提供的一个通用预处理宏
#include <assert.h>
assert(0 != filename); //满足条件就继续执行,否则打印诊断信息,然后终止
注释不能嵌套使用/* /* */ */
静态内存分配:程序执行之前就已经诊断所需的内存类型和大小,因此效率较高,缺点是不够灵活
动态内存分配:指针的使用??
内存泄露:一块动态内存的分配,我们不再拥有指向这块内存的指针,因此我们没有办法返还给程序供以后重新使用
基类析构函数为虚析构函数,会先detele派生类对象再detele基类对象,反之则只会删除基类对象,造成内存泄漏
数据自动转换:无符号和有符号做运算,都会作为无符号处理(signed converted to unsigned)
小范围转大范围是无伤转换(eg:short 转换为int)
extern int i; //仅仅是对i的声明
int j; //不仅声明且是定义
extern int i = 0; //声明并重新赋值
vector是c++标准库定义的数据结构(同string),是顺序容器,存储空间自动分配,动态扩大,缩小
vector添加元素用push_back,而不是像数组那样通过数组下标添加,但是可以通过下标读取元素
int &refs[10] = ...; //error 没有引用数组
int (&refs)[10] = arr; //arr[10]的引用
指针赋值给指针类型要一致,指针与被指对象类型要一致
成员是四种访问方式:对象.成员 引用.成员 对象指针->成员 类名::成员
常成员不能修改成员变量和调用成员函数
静态成员变量在类外初始化,该类所有对象共享:类型 类名::静态成员变量 = 初值;
抽象类不能创建对象,派生类若没有实现基类的纯虚函数,那也是一个抽象类
void fun() const{} //类成员函数后面加const,表面这个函数不可以对类对象的数据成员作任何改变(非static)
C++的class在编译第一步是找到所以声明,后面才是实现。所以实现中可以调用声明在后面(排版)的成员,与位置无关