c11标准
在编译器vs13及其以上可以使用 编译器对语言的一种优化
1.变量初始化 int a=0,a(10),a{10};定义a的值的三种方式
2.nullptr 相当于c的null 有类型 更加的安全
3.auto 自适应类型 用于返回类型比较复杂的返回值
4.decltype 用一个变量定义同类型的变量/该类型的引用
5.关于for的一个用法for(i:arr) 变量数组里所有的数据
6.类的别名 C语言用 typedef int INT typedef 类型名 别名来定义 c++中用using INT=int来使用
7.类中成员 一般是构造中赋初值 C11可以直接在类中赋初值
8.A()=default;自动生成默认构造
9.委托 在构造中调用自己的其他构造
10.final 放在虚函数后面防止重写终极函数不能重写 放在类后面终极类不能派生其他子类
1 #include<iostream> 2 #include<vector>//向量 3 using namespace std; 4 class A 5 { 6 int data = 0; 7 int y; 8 public: 9 //A(){ data = 0; }//构造函数 10 A() = default;//默认构造 如果写了其他构造 默认不在自动生成一个构造函数 11 A(int data) :data(data){}//有参构造 初始化新参列表 12 A(int x, int y) :A(x){ this->y = y; }//在里面调用其他构造帮忙做事情 --->委托 13 }; 14 15 class B 16 { 17 public: 18 virtual void fun(){ 19 cout << "父类函数" << endl; 20 } 21 virtual void fun2()final{//加上final为终极类不能进行派生 22 cout << "父类函数2" << endl; 23 } 24 }; 25 class C :public B 26 { 27 void fun(){ 28 cout << "子类函数" << endl; 29 } 30 // void fun2(){ 31 // cout << "类函数2" << endl; 32 // }子类函数fun2不能继承父类的函数 因为父类函数是终极函数 不能进行派生 33 }; 34 class D final//不能派生任何子类 35 { 36 37 }; 38 class E//:public 不能派生D 39 { 40 41 }; 42 int main() 43 { 44 A aa; 45 int a = 0;//c语言的赋值方式 46 int b(10);//c++的赋值方式 常用于初始化形参列表 47 int c{10};//c11标准提出 48 int d[10]{1, 2, 3, 4, 5, 6, 7, 8, 9};//数组初始化 49 NULL;//c语言指针空 宏定义 50 nullptr;//c++的指针空 void*类型 51 52 auto x = 3.14;//auto类型 根据后面的值返回定义的类型 必须初始化否则无意义 53 vector<int>arr = { 1, 2, 3, 4, 5, 6, 7, 8 }; 54 //初始化数组 55 vector<int>::iterator it = arr.begin();//指向第一个元素 iterator用于修改元素的值 56 auto p = arr.begin(); 57 cout << *it << endl << *p << endl; 58 int y;//int类型的变量 59 decltype(y) z;//定义一个变量z 60 //decltype是返回y的类型 z的类型和y的类型一样 int z 61 //z是什么类型 根据前面的y确定的 目的:定义同类型的变量 62 decltype((y)) py = y;//定义一个引用类型 相当于 int& y 63 for (auto i : arr)//循环打印arr的所有元素 i是新定义的变量 arr是数组 64 { 65 cout << i; 66 } 67 using INT = int;//给int取别名 INT 68 using ARR = int[4]; 69 ARR ab;//相当于int ab[4]; 70 cin.get(); 71 return 0; 72 }