• C++ 第二天


    函数参数的默认值
    一个函数在定义或者声明时 可以给参数指定默认值,那在调用这个函数时 如果不给这个参数传实参则使用默认的参数值,
    如果传入参数值 则使用传入的值替代默认的值。
    作用:减少函数的个数 方便调用
    限制:参数的默认值,必须靠右
    一个参数有默认值,则参数右边所有参数必须都有默认值
    当函数的声明 和实现分开时 参数的默认值需要声明中指定 实现不再指定
    #include <iostream>
    using namespace std;
    void show(int x=1,int y=2){
    cout << x << endl;
    cout << y << endl;
    }

    int main(){
    show();
    show(1);
    show(100,200);
    }
    内联函数
    inline
    在编译时 请求编译器把函数的二进制直接复制到调用位置 这样减少开函数栈 和清理函数栈的开销提高效率
    大函数 稀少调用的函数 不适合内联
    小函数 频繁调用 适合内联
    递归函数 无法实现内联

    内联只是一种请求 请求成功就按照内联方式调用
    请求失败 就按照普通函数的方式去调用
    #include <iostream>
    using namespace std;
    inline getmax(int x,int y){
    return x>y?x:y;
    }
    int germin(int x,int y){
    return x>y?y:x;
    }
    int main(){
    getmax(1,2);
    getmin(100,200);
    }

    c++ 中的动态内存分配
    c中 malloc realloc calloc free
    c++ 中使用
    new delete
    /*分配堆内存*/
    类型 *指针名 = new 类型;
    类型 *指针名 = new 类型(值);
    /*释放堆内存*/
    delete 指针名
    new[] delete[]

    #include <iostream>
    using namespace std;
    struct Date{
    int year;
    int month;
    int day;
    void show(){
    cout << year << '-' << month << '-' << day << endl;
    }
    };
    int main(){
    Date date;
    cout << &date << endl;
    Date *pd = new Date();
    cout << pd << endl;
    pd->year = 2018;
    pd->month = 10;
    pd->day = 31;
    pd->show();
    delete pd;
    }

    申请多个元素空间
    类型 *parr = new 类型名[n];
    int *parr = new int [10];
    delete[] parr;

    定位内存分配

    c++ 中的引用
    概念
    引用就是一个变量的别名
    语法
    int a=99;
    int& ra=a;
    引用类型 必须初始化
    类型& 引用名=值;
    引用一旦初始化 则在这个变量的生命期内这个引用名只能为这个变量服务。

    引用的应用
    函数的参数
    /*引用传递*/
    void myswap(int &x, int& y);
    void myswap(int x,int y);
    /*写一个函数完成两个整数变量的值交换*/
    可以在函数内部 访问到函数外部的数据
    减少复制 真正存储空间只有一份

    函数的返回值
    c中函数的返回值 一般作为右值。函数返回值是一个只读的空间。
    不能返回局部变量的引用 可以返回 全局 静态 堆内存 引用
    常引用 和 引用的底层实现
    const int& ra =100;
    c++ /*引用类型的参数 加一个const 是为了增强函数的兼容性 除非要在函数内修改参数*/
    常引用 既可以引用常量 也可以引用变量

    c 作用就是防止函数内部对变量进行修改 /**/

    引用和指针的联系 和区别?

    c++ 中的类型转换
    (类型) 强制类型转换

    static_cast<类型>(变量)
    在某一个方向上 可以做隐士类型转换
    int *pi = new int(100);
    void *pv = pi;
    #include <iostream>
    using namespace std;
    int main(){
    int *pi=new int(100);
    void *pv =pi;
    int *pt=static_cast<int*>(pv);
    cout << *pt << endl;
    }
    dynamic_cast<类型>(变量)
    用在具有多态性的父子类之间

    const_cast<类型>(变量)
    专业去常的转换
    #include <iostream>
    using namespace std;
    int main(){
    volatile const int a=100;
    //int *pa = (int*)&a;
    int *pa = const_cast<int*>(&a);
    *pa=200;
    cout << *pa << endl;
    cout << a << endl;
    /*对内存进行重新解释 最接近强制类型转换*/
    }

    reinterpret_cast<类型>(变量);
    最接近C强制类型转换
    把整数变成指针
    指针变成整数

  • 相关阅读:
    自调用匿名函数和js的Module模式
    设置一天中不同时段的倒计时,计算时针和分针的夹角
    移动端web开发中对点透的处理,以及理解fastclick如何做到去除300ms延迟
    使用Fiddler改变线上js文件的引用路径
    Linux下常用设置文件和文件夹读写权限操作
    RESTful API
    mysql之load语句
    Django学习之点赞功能
    Django学习之网站图标
    python学习之pyenv
  • 原文地址:https://www.cnblogs.com/Malphite/p/9902383.html
Copyright © 2020-2023  润新知