zoukankan      html  css  js  c++  java
  • 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,注意只能在最开始定义这个宏,否则无效

  • 相关阅读:
    Python小白的数学建模 ---- 系列课程
    Maven学习笔记
    JavaScript 中的 Var,Let 和 Const 有什么区别
    (鸡汤文)搞懂了 JavaScript 定时器 setTimeout() 的 this 指向!
    setTimeout返回值的验证,(〒︿〒) 请原谅我一直以来对你的忽视
    终于把初中到大学的数学知识梳理完了(学习算法必备数学知识)
    最简单入门深度学习
    机器学习基本流程
    Vue.js源码解析-Vue初始化流程
    最大公约数&最小公倍数
  • 原文地址:https://www.cnblogs.com/Con-Tch-LLYF/p/6534107.html
Copyright © 2011-2022 走看看