C++学习笔记(6)

其他:

  1. 省略号作函数参数:表示函数的参数是不固定的,可以传递一个或者多个参数(如:printf函数):void Output(int num, ...)
  2. 函数重载:函数的参数个数,类型不同,注意函数的返回值类型不作为重载依据
  3. 函数模板:不是说函数模板中class和typedef一样的效果可以互换吗,为是么VS中会报错?!

实例1:

template<class type>//模板参数为模板类型参数

type Add(type a, type b)

{

   return a + b;

}

int main()

{

   //int n = Add<int>(10.5, 20);

   //int n = Add(10.5, 20);//不能这样,除非加一个int或者其他数据类型,如上

   int n = Add(10.5, 20.0);

   cout << n << endl;

   return 0;

}

实例2:

template<class type, int n> //n为模板非类型参数

type Max(type num[n]) //注意n这里表示的是数组长度

{

   type Tr = num[0];

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

      Tr = (Tr > num[i]) ? Tr : num[i];

   return Tr;

}

int main()

{

   int Num1[5] = { 1, 2, 3, 4, 5 };

   int Tr1 = Max<int, 5>(Num1);

   cout << Tr1 << endl;

   double Num2[5] = { 1.1, 2.2, 3.3, 4.4, 5.5 };

   double Tr2 = Max<double, 5>(Num2);

   cout << Tr2 << endl;

   return 0;

}

  1. 函数模板的重载

template<class type>

type Add(type a, type b)

{

   return a + b;

}

template<class type>

type Add(type a[], int n) //注意这里是数组,所以a要加[],同时也要注意,函数模板的重载和单纯的函数模板在这里有一点区别

{

   type sum = 0;

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

   {

      sum += a[0];

   }

   return sum;

}

int main()

{

   int a[5] = { 1, 2, 3, 4, 5 };

   int sum1 = Add(10, 20);

   int sum2 = Add(a, 5); //注意在main中调用时a不加[]

   cout << sum1 << " " << sum2 << endl;

   return 0;

}

  1. const修饰:(注:一下内容摘自百度)

 int   b   =   500;   
  const   int*   a   =   &b;              [1]   
  int   const   *a   =   &b;              [2]   
  int*   const   a   =   &b;              [3]   
  const   int*   const   a   =   &b;   [4]   
    

  如果你能区分出上述四种情况,那么,恭喜你,你已经迈出了可喜的一步。不知道,也没关系,我们可以参考《effective   c++》item21上的做法,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的 右侧,const就是修饰指针本身,即指针本身是常量。因此,[1]和[2]的情况相同(即二者等效),都是指针所指向的内容为常量,这种情况下不允许对内容进行更改操 作,如不能*a   =   3   ;[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;[4]为指针本身和指向的内容均为常 量。

   

6.关于VS中的安全访问问题,如:print_s,strcpy_s等,可以通过在最开始定义#define _CRT_SECURE_NO_WARNINGS,注意只能在最开始定义这个宏,否则无效

原文地址:https://www.cnblogs.com/Con-Tch-LLYF/p/6534107.html