C++概述 课堂笔记

函数的重载

在C语言中函数名是唯一的,不可以重复定义,当我们利用函数执行,功能相似的函数,我们也不能使用同一个函数,比如说,求整型的函数,不能用来求浮点型、字符型。在C++中引入函数重载的概念,函数名可以相同,只要函数的参数类型不同或者参数的个数不同。

#include <iostream>
using namespace std;

int mymax(int a, int b)
{
    return a > b ? a : b;
}

float mymax(float a, float b)
{
    return a > b ? a : b;
}

double mymax(double a, double b)
{
    return a > b ? a : b;
}

char mymax(char a,char b)
{
    return a > b ? a : b;
}

int main()
{
    cout << mymax(10, 20) << endl;
    cout << mymax(3.14, 5.20) << endl;
    cout << mymax(2.33333333, 5.555555) << endl;
    cout << mymax('a', 'A') << endl;

    return 0;
}

在C++中支持函数的重载,允许函数名相同,只需要函数参数的类型不相同或参数的个数不同。它优于C语言的是我们不需要大量记忆功能相同的函数名。比如上面的求最大值的函数,我们只需要记忆mymax是求最大值的函数,如果是C语言我们就需要记忆4个函数名,因为C语言不支持函数的重载,函数名不可以相同。

作用域运算符::

我们在C语言中已经知道了变量的作用域范围

当一个局部和全局变量同时存在的时候,我们优先使用局部变量,那我们又想使用全局变量怎么办,我们加作用域运算符就可以优先使用全局变量了。

#include <iostream>
using namespace std;

int a = 100;

int main()
{
    int a = 10;
    cout << "a=" << a << endl;
    cout << "::a=" << ::a << endl;

    return 0;
}

强制类型转换

在C语言中我们也学过强制类型转换,C++也可以使用C语言的强制类型转换,在C++引入新的强制转换的方法就是为了,更加的方便

#include <iostream>
using namespace std;

int main()
{
    float f = 3.14;
    cout << (int)f << endl;//C语言的写法
    cout << int(f) << endl;//C++的写法

    return 0;
}

C++的强制类型转换与C语言的强制类型转换的不同就在,C语言是把要强制类型转换的类型加括号,C++的写法是将我们要强制转换的数据变量括起来。

#include <iostream>
using namespace std;

int main()
{
    float f = 3.14;
    int a = (int)f + 0.9;

    int b = int(f + 0.9);

    int c = (int)(f + 0.9);


    cout << "a=" << a << " " << "b=" << b << " " << "c=" << c << endl;

    return 0;
}

如果我们要强制类型转换f+0.9,在C语言需要两个括号,而C++只需要一个括号。

运算符new和delete

C语言中我们使用malloc,realloc来申请动态的内存空间,在C++中我们使用new来申请空间
C语言使用free释放内存空间,而C++使用delete来释放空间

我们先写一个程序看看new和delete是怎么使用的

#include <iostream>
using namespace std;

int main()
{
    int* p = new int;//公式:  指针变量名=new 类型名。 该行代码的作用是申请一个整型空间,然后这个整型空间的地址存在p指针中
    *p = 100;
    cout << *p << endl;

    delete p;//释放申请的整型空间,防止内存泄露

    return 0;
}

那么我们假如要申请很多个整型空间怎么做呢

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    int* p = new int[10];//向内存申请10个整型空间,首地址给p    公式:指针变量名=new 类型名[size]  size是申请的个数

    if (p == NULL)//判断是否申请空间成功
    {
        perror("new:");//打印错误信息
        return 1;//结束程序
    }
    for (int i = 0; i < 10; i++)//输入10个元素
    {
        cin >> p[i];
    }

    for (int i = 0; i < 10; i++)//输出
    {
        cout<< p[i]<<" ";
    }

    delete []p;//释放我们数组的空间 公式: delete [] 指针变量名

    return 0;
}

#include <iostream>
using namespace std;

int main()
{
    int* p = new int(100);//申请一个整型空间,并且将100赋值给*p
    cout << *p << endl;
    delete p;
    return 0;
}

C语言的动态内存申请,malloc、realloc申请成功返回的是void*的指针,我们还需要进行类型转换。而new开辟的内存空间成功返回的直接是首地址,不需要强制类型转换,malloc也需要进行字节大小的计算,所以,C++中new申请动态内存空间更加便利。

引用

引用简单的说就是绰号,就是一个变量的别名。

从图中也可以发现,引用用的ta等价于a,改变ta也会改变a

我们定义引用名时要立马指定我们要引用谁,不然会报错。

引用可以作为函数的参数

在C语言的时候我们就知道了,函数形参是实参的一份临时的拷贝,如果我们要修改实参的元素,我们需要传地址。

eg:交换两个数字

上面的方法是我们C语言的时候学习的,传数据的地址过去,利用指针接受,解引用如何访问a,b数据的空间

在我们C++中,我们可以利用引用的操作,这个做法更加简单。

C++中避免了,书写多个*,我们利用int& x,int& y,接收a,b。

x就是a的引用,它们共用同一块空间,修改x相当于修改a

使用引用返回函数值

我们通常知道,一个函数会返回一个类型,我们不能对调用函数的语句进行什么操作,在C++的引用中,如果将函数的返回值引用,我们就可以对返回值进行操作,从而对内容修改,我们看实际的例子。

我们加了引用,Change(4)相当于a[4],我们可以对其修改,如果不加会报错

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值