关键字
-
static
参考博客.
1)声明变量储存在静态区,默认值为0,
2)保持变量内容的持久,声明周期同全局变量,但是可见范围和局部变量相似
3)C++中的类成员声明static,类的静态成员函数/变量是属于整个类而非类的对象,静态成员函数仅能访问类的静态数据和静态成员函数,静态数据成员是静态存储的,所以必须对它进行初始化,静态成员为父类和子类共享。 -
const
修饰普通变量,表示常量。修饰普通函数参数,表示此参数是传入参数,不希望在函数内改变其值,参数类型常为指针或引用。修饰类的成员函数表示不能修改类的成员变量 -
final
禁用继承,禁用重写 -
#define
宏定义,简单的理解就是替换
面向对象
- 多态
运行时多态: 真正的多态,通过虚函数实现,形象的说,同一操作作用于不同的对象,可以有不同的结果,运行时,可通过指向基类的指针,来调用实现派生类中的方法。
编译时多态: 并不是真真的多态,如:函数重载(包括运算符重载)和模板实现 - 复制构造函数不允许传递值,只能通过传递引用方式。类的实例的私有变量可以在类中直接调用, 如复制构造函数:
A(A& other) { value = other.value;}
- 虚函数与虚函数表 参考文章1 参考文章2
有虚函数的类A有一张虚函数表 c,虚函数表是一个指针数组用来指向函数地址,而A的每个实例对象就会有一个虚函数表指针*__vptr,指向vtbl。对象调用虚函数需要通过__vptr去访问vtbl,进而调用虚函数。当子类B继承A,那么B也会有一个虚函数表,父类的虚函数在子类的虚函数前面,当B中对A的虚函数进行覆盖重写时,覆盖的函数被放到虚函数表中原来父类虚函数的位置。
多继承:
2.浅拷贝和深拷贝
浅拷贝:把对象a里的值完全复制给b另一个对象,如果a对象中存在动态分配内存,其复制的只是将指针复制给另一个对象,实际上是指向同一个内存区域,当一个对象将内存释放(如:析构),另一个就成为野指针,运行出错,
深拷贝:当一个对象有资源,在复制时对进行资源的再重新给新构造对象分配,就是深拷贝。
string
1.指针常量初始化和常量内存初始化
常量字符串放在单独的内存区域,用几个指针常量初始化相同的常量字符串,实际上是都指向这个空间,
//现在好像不能这样声明了
char *str1 = “abc”;
char *str2 = “abc”;//str1 == str2指向同一内存
char str3[] = “abc”;
char str4[]= “abc”;//str3 != str4
2.strcpy和strcopy_s
strcopy_s是安全版本存在于头文件< cstring>,接受两个参数或者三个,被复制的长度都不能超过
str的空间长度。
注:strlen()求的长度不包含结束字符,所以复制时候应加上这个1
char* str1 = new char[20];
char str[7];
strcpy_s(str1, strlen("hello world")+1 , "hello world"); //三个参数,第二个为复制提供的长度,应该大于被复制的字符串
strcpy_s(str,"hello"); //当被复制字符串长度小于等于str的长度才不会报错,不然报错
- C++中的string
STL
1.vector
vector<int> a; //声明一个int型向量a
vector<int> a(10); //声明一个初始大小为10的向量
vector<int> a(10, 1); //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a); //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3);//将a向量中从第0个到第2个(共3个)作为向量b的初始值
//直接使用数组来初始化向量:
int n[] = {1, 2, 3, 4, 5};
vector<int> a(n, n+5); //将数组n的前5个元素作为向量a的初值
vector<int> a(&n[1], &n[4]); //将n[1] - n[4]范围内的元素作为向量a的初值
多线程
C++11提供了许多性的特征
- 关键字:
auto
自动推断变量类型,auto作为函数返回值时,只能用于定义函数,不能用于声明函数。
nullptr:
C++中不能把void*类型的指针隐式转换成其他类型的指针,NULL实际上是0。NULL代替0表示空指针在函数重载时会出现问题。nullptr这一新的关键字来代指空指针 - 多线程
C++11提供了线程库 thread 用于创建线程 ,配合线程相关的库如:互斥量库mutex等。线程的通信。 - 智能指针内存管理
更加安全的使用动态内存。解决两个问题:一种是忘记释放内存,会造成内存泄漏;一种是尚有指针引用内存的情况下就释放了它,就会产生引用非法内存的指针。 - 其他特性,如容器