zoukankan      html  css  js  c++  java
  • C++离港篇

    4.0 C++语言引用

    也就是变量的别名

    基本数据类型的引用

    #include <iostream>
    using namespace std;
    int main(void)
    {
        int a = 3;
        int &b = a; //引用必须初始化
    
        b = 10;
        cout << a << endl;
        return 0;
    }

    结构体类型的引用

    #include <iostream>
    using namespace std;
    
    typedef struct
    {
        int x;
        int y;
    }Coor;
    int main(void)
    {
        Coor c1;
        Coor& c = c1;
        c.x = 10;
        c.y = 20;
        cout << c1.x << " " << c1.y << endl;
        return 0;
    }

    指针类型的引用

    #include <iostream>
    using namespace std;
    
    
    int main(void)
    {
        int a = 10;
        int *p = &a;
        int *&q = p;
        *q = 20;
        cout << a << endl;
        return 0;
    }

    引用做函数参数

    void fun(int &a, int &b)
    {
        int c = 0;
        c = a;
        a = b;
        b = c;
    }
    
    int x = 10, y = 20;
    fun(x, y); // 引用
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    void fun(int &a, int &b);
    
    void fun(int &a, int &b)
    {
        int c = 0;
        c = a;
        a = b;
        b = c;
    }
    int main(void)
    {
        int x = 10;
        int y = 20;
        cout << x << "," << y << endl;
        fun(x,y);
        cout << x << "," << y << endl;
        system("pause");
        return 0;
    }

    4.1 控制变化的 const

    int x = 3; 
    const int * p = &x;
    p = &y; // 正确
    *p = 4; //错误
    int x = 3;
    int* const p = &x;
    p = &y; // 错误的
    const int x = 3;
    const int* const p = &x;
    p = &y;//错误
    *p = 4;//错误
    // const 与引用
    int x = 3;
    const int& y = x;
    x = 10; // 正确
    y = 20; // 错误

    指针指向const修饰的变量时(int const a = 3;),应该是const int const *p = &a;

    4.1 C++函数特性

    void fun(int i, int j =5, int k =10); //(O)
    void fun(int i, int j = 5, int k);// (X)

    有默认参数值的参数必须在参数表的最右端

    //无实参则用默认值,否则实参覆盖默认值
    void fun(int i, int j = 5, int k = 10);
    
    void fun(int i, int j, int k)
    {
        cout << i << j << k;
    }
    
    int main()
    {
        fun(20);
        fun(20, 30);
        fun(20, 30, 40);
    
        return 0;
    }

    4.2 函数重载

    在相同作用域内,用同一函数名定义的多个函数,参数多个和参数类型不同

    getMax(int x, int y, int z)  // getMax_int_int_int
    getMax(double x, double y) //getMax_double_double

    内联函数

    // 内联函数关键字 : inline
    inline int max(int a, int b, int c);
    int main()
    {
        int i = 10, j = 20, k = 30;
        m = max(i, j, k);
        cout << "max=" << m << endl;
        return 0;
    }

    内联编译是建议性的,由编译器决定

    逻辑简单,调用频繁的函数建议使用内联

    递归函数无法使用内联方式

    函数重载练习

    /*****************************/
    /*现有一个数组, 定义一个方法getMax(),利用函数的重载
    *分别实现:
    *    1.随意取出数组中的两个元素,传到方法getMax()中,
    *可以返回较大的一个元素。
    *
    *    2.将整个数组传到方法getMax()中,可以返回数组中最
    *大的一个元素。
    *
    */
    /*****************************/
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    // 函数功能:返回a和b的最大值
    int getMax(int a, int b)
    {
        return a > b ? a : b;
    
    }
    // 函数功能:返回数组中的最大值
    int getMax(int* arr, int count)
    {
        int maxNum = arr[0];
        for (int i = 1;i < count;i++)
        {
            if (maxNum < arr[i])
            {
                maxNum = arr[i];
            }
        }
        return maxNum;
    }
    
    int main(void)
    {
        int numArr[3] = {9,8,6};
        //自动调用返回数组中的最大值
        cout << getMax(numArr, 3) << endl;
        //自动调用返回a和b最大值
        cout << getMax(numArr[0], numArr[2]) << endl;
        system("pause");
        return 0;
    }

     4.3 内存管理

    new 申请

    delete 释放

    示例代码:

    #include<iostream>
    #include<stdlib.h>
    
    using namespace std;
    int main()
    {
        int* p = new int[100];
        if (NULL == p)
        {
            system("pause");
            return 0;
        }
        p[0] = 10;
        p[1] = 17;
        cout << p[0] << "," << p[1] << endl;
        delete[]p;//数组空间的删除
        p = NULL;
        system("pause");
        return 0;

     代码示例:

    /***************/
    /*在堆中申请100个char类型的内存,拷贝Hello imooc字符串到
     *分配的堆中内存中,打印字符串,最后释放内存
     */
     /***************/
    #include <string.h>
    #include <iostream>
    using namespace std;
    
    int main(void)
    {
        //在堆中申请100个char类型的内存
        char *str = new char[100];
        //拷贝Hello imooc字符串到分配的堆中的内存中
        strcpy(str, "Hello imooc");
        //打印字符串
        cout << str << endl;
        //释放字符串
        delete []str;
        str = NULL;
        return 0;
    }
  • 相关阅读:
    Android 进程生命周期 Process Lifecycle
    .NET Core微服务之基于IdentityServer建立授权与验证服务(续)
    .NET Core微服务之基于IdentityServer建立授权与验证服务
    .NET Core微服务之基于Ocelot实现API网关服务(续)
    .NET Core微服务之基于Ocelot实现API网关服务
    .NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
    .NET Core微服务之基于Consul实现服务治理(续)
    .NET Core微服务之基于Consul实现服务治理
    一朝入梦,终生不醒:再看红楼梦,也谈石头记
    月光下的凤尾竹—彩云之南西双版纳游记
  • 原文地址:https://www.cnblogs.com/pxxfxxxx/p/11057780.html
Copyright © 2011-2022 走看看