您的位置:首页 > 编程语言 > C语言/C++

c++笔记1

2017-07-25 19:18 106 查看
1.引用:可以认为是一个已定义的变量的别名

 Type& name = var

   eg:int a = 4;

      int& b = a;

必须在声明的时候用变量初始化  int& b;b=a;×

在一些场合可以代替指针,比指针具有更好的可读性和实用性

eg:

void swap(int& a,int& b)

{

   int t = a;

   a = b;

   b = t;

}

swap(a,b);

void swap(int* a,int* b)

{

   int t = *a;

   *a = *b;

   *b = t;

}

swap(&a,&b);

2.const引用:让变量只读(不能作左值)

const Type& name = var;

eg:

int a = 4;

const int& b = a;

b=5;×

使用常量const 引用初始化后将生成一个只读变量

引用在c++内部是常量指针,所占用空间大小与指针相同

引用作为返回值时:

①作为局部变量的返回值,不能作左值

②作为全局/静态变量的返回值,能作左值能作右值

3.内联函数:可用于替代宏代码块

inline int fun(int a,int b)

{

  ......

  return ;

}

最终生成的代码是没有定义的

编译器直接将函数体插入调用的地方

无调用开销

只是对编译器的请求,请求不成功将作为普通函数

限制:不能有循环

      不能有过多的条件判断语句

      函数体不能过大

      不能对函数进行取址

      内联声明必须在调用前

4.重载:同一关键字搭配不同的上下文含义不同

  函数重载:同一函数名定义不同函数

  int fun(int x){......}

  int fun(int a,int b){......}

  int fun(const char* s){......}

  重载必须至少满足以下一点:参数个数不同/参数类型不同/参数顺序不同

  返回值不能作为重载依据

 

5.c与c++相互调用

  #ifdef _cplusplus

  extern "c"

  {

  #endif

  ......

  #ifdef _cpluscplus

  }

  #endif

6.动态内存分配:new   删除 : delete

  变量申请:Type* pointer = new Type;......delete pointer;

  数组申请: Type* pointer = new Type
;......delete[] pointer;

eg:

  int* p = new int;

  *p = 5;

  *p = *p+10;//*p=15;

  delete p;

  p = new int[10];

  for(int i=0;i<10;i++)

 {

    p[i]=i;

 }

  delete[] p;

new 关键字初始化:int* p = new int(1);char* p = new char('c');

7.命名空间

  namespace name{......}

  eg:namespace first

  {int i=0;}

  namespace second

  {

     int i = 1;

     namespace internal

     {

        struct P

        {

            int i;

            int y;

         }

      }

   }

命名空间的使用:

①使用整个命名空间:using namespace name;

②使用命名空间中的变量:using namespace::variable;

③使用默认命名空间中的变量: ::variable;

eg:using namespace first;

   printf("i = %d";i);//i=0

   using second::internal::P;

   printf("second::i = %d",second::i);//i=1

   P p = {2,3};//p.x = 2;p.y = 3;

8.强制类型转换

  ①static_cast:基本类型间的转换,不能用于指针

                有继承类对象间的转换和类指针间的转换

   eg:

   int i = 0;

   char c = 'c';

   int* p = &i;

   char* pc = &c;

   c = static_cast<char>(i);√

   pc = static_cast<char*>(pi);×

   ②const_cast:用于去除变量的const属性

   eg:

   const int& j = 1;

   int& k = const_cast<int&>(j);

   const int x = 2;

   int& y = const_cast<int&>(x);

   k = 5;y = 3;

   //j = 5;k = 5; x = 2; y = 3;

   ③reinterpret_cast:用于指针类型间的强制转换

                      用于整数和指针间强制转换

    eg:

    int i = 0;

    char c = 'c';

    int* pi = &i;

    int* pc = &c;

    pc = reinterpret_cast<char*>(pi);

    pi = reinterpret_cast<int*>(pc);//可以这样转换,但是没意义

    ④dynamic_cast:用于类层次的转换,类之间的转换

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息