20190718

it2022-05-05  91

C++基础学习

1、双冒号的使用::,全局变量  。或者命名空间下的作用范围

2、namespace 命名空间 。a,解决命名冲突问题,b,必须在全局作用域下声明,c,命名空间下可以放函数,变量,结构体,类,还可以嵌套命名空间,命名空间是开放的随时可加新内容,合并而不是覆盖,还可以起别名

3、using声明和using编译指令

       int sunwukongId=10;//声明

      using KingGlory::sunwukongId;

      cout<<sunwukongId<<endl;//出错,声明和前面定义同样优先级识别不出

      using namespace KingGlory;

      using namespace LOL;

      后面使用是需注明cout<<LOL::sunwukongId

4、C++对C语言的增强

     4.1、对全局变量的检测增强

             函数检测增强、传参类型、返回值检测、参数个数

    4.2 、类型转换增强 malloc返回void*c中不用强转,C++中必须强转

    4.3、struct增强

           C++中可以有函数、c中必须加struct关键字

     4.4、增加bool数据类型

     4.5、三目运算符的增强

             c中返回的是值,C++中返回的是变量

5、const增强

   C中全局变量是常量,函数内部的const是伪常量,分配有内存,可改变其中的值,不能用来初始化数组

   C++中const只能是常量,不分配内存,c++中是符号表key-value,用指针也是临时分配了一个内存存另一个变量tmp,而不改变符号表中的内容

   C语言中const是外链接,直接用可以在外部文件中找到,C++默认是内部链接,需要用关键字extern来变得公用

 6、const内存问题          (绕过编译器检测进行修改)

      6.1 取地址会临时分配内存

       6.2extern const 会分配内存

      6.3 用普通变量初始化const变量会分配内存

           int a=10;

           const b=a;

          int *p=(int *)&b;

           *p=100;

             cout<<b<<endl;        //输出为100,分配内存的变量都可以通过指针改了

        6.4自定义数据类型加const也会分配内存

               struct person

                  {

                    int mage;

                    string  mname;

                 };

               void test01()

               {                           const person p1;

                             p1="aaaaaaaaaaaaaa"//错

                         person *p=(person *) &p1;

                          p->mage=18;//P是指针用->

                               (*p).mname="bbbbbbbbbbbbbbbbbb";//*p是实例用   . (点)

                         cout<<p1.mage<<p1.mname<<endl;

           define 宏定义预处理时就处理了;const 有数据类型,且有作用域

7 引用   type & 新名字=原名字

     7.1      必须初始化,且初始化之后不能修改了

                int =10;

                int   &b=a;

                 b=100;

                 cout<<a<<endl;           //a=100

                int  c=30;

                     &b=c;              // 错

       7.2  对数组的引用

             int   arry[10];

                 for循环赋值

           int (&Arrary)[10]=arry;  //给数组取别名,且初始化为arry

               用Arrary把之前的arry输出

          typedef int (ARRYREF)[10];//一个有10个元素的int类型的数组

               ARRYREF  & Arrary2[10]=arry;//类型+别名+初始化

 

 

也看了书上大概前四章的东西,以后尽量每天写一些

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


最新回复(0)