Java转c++_笔记

1.#ifndef(条件编译命令)是为了避免c++全局变量多重定义的错误   形式1:#ifndef #else #endif   形式2:#ifndef  #define 没有定义则进行此段(#else)定义过则此段#endif         即定义过则忽略第一段 进行第二段
2.namespace命名空间用来区分同名函数的不同版本
3.extern标示变量或者函数定义在别的文件中
4.static对于函数来讲的作用仅限于隐藏     全局变量和static变量都存储在静态存储区,只不过static可以控制变量的可见范围 如果在函数内定义,程序结束而不是函数结束 才执行析构函数   静态存储区默认字节0x00  为防止父类影响 可以在子类定义一个与父类相同的静态变量 以屏蔽父类的影响
5.#define是预处理指令(简单替换)  
  #typedef 编译时处理(真正的类型)   使用靠前的符号
6.explicit可以抑制内置类型隐式转换(如传string,通过构造器转化为类对象),所以在类的构造函数中,尽可能多的使用explicit关键字
7.virtual 方法前的virtual虚函数指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,调用一个虚函数实际调用的是继承类的版本(多态)  类前的virtual-虚继承  虚析构   可以避免父类的多次构造 (多重继承时父类构造在子类构造前,析构反之,多个子类导致父类多次构造)
8.构造函数后的:用于赋值    在函数前的::表明是全局函数  System::Math::Sqrt()相当于System.Math.Sqrt()
9.VSCode单击是预览,双击是打开.  C+A+'-' 返回CTRL进入前的代码
10.析构函数的作用不是删除对象而是在撤销对象占用的内存之前的清理工作,无返回值无类型无参数仅1
11.  ->  用于 类 类型的 指针 访问成员(it->mem 相当于(*it.mem))                     对象用.
12.输出调试信息级别:DEBUG INFO WARN ERROR FTAL
13.代码特色:  {,}定义   case不break使多种case同样结果节省代码     if判断常量写左边
14.const*  代表指针所指内容是常量 反之*const指针本身是常量
15.int X(void)在c中是不接受参数 ()是任意参数    c++中都是无参
16.static_cast 强制类型转换
17.使用指针的情况:改变实参  传递大型结构 遍历/传递数组或频繁引用其元素 动态分配空间 返回指针
18.c++中的struct和类无本质区别  struct变量默认public class中是private
19.c++程序运行过程:预处理(展开头文件和宏)-编译(分析后转化为汇编语言)-汇编(将汇编转化为机器)-链接(调用库文件)
20.在删除一个指针后,编译器只会释放该指针所指向的内存空间而不会删除这个指针本身,所以一定要在删除指针之后将该指针设置成空指针 即在delete *p 之后一定要加上: p=NULL
21.c语言中常量字符串不可更改:char* s="Hello"   ,char s2[]="hello"可以更改
22.浅拷贝:两个对象指向同一个内存空间(未定义拷贝构造函数从而使用默认构造函数 如Student s2(s1))
自定义拷贝构造函数防止此情况: Student::Student(const Student &s){}  就是深拷贝,深拷贝不仅对指针进行拷贝,而且对指针所指向的内容也进行拷贝,深拷贝后的指针指向不同的地址.  浅拷贝会调用2次析构 从而出现问题,可用std::shared_ptr解决    
23.iterator 但凡使用了迭代器的循环体,都不要向迭代器所属容器添加元素:会使迭代器失效,且多申请内存空间
24.list 链表 可通过.sort()排序(此sort是自己的sort,不是algorithm的sort)
25.set  multiset(可以有多个相同的键)    map(用count判断相同) mulltimap可以反转,且一键可多值   另四种无关联容器:unordered_set/multiset/map/mutimap
  


 

你可能感兴趣的:(C++)