C++学习之路(2) C++输入输出 new delete操作符 函数重载

来源:互联网 发布:windows访问共享文件夹 编辑:程序博客网 时间:2024/05/14 05:09

源码见github,仓库地址为:https://github.com/Kelvinmao/Cplusplus

一. C++风格的输入输出

在编写C++程序时,如果需要使用输入输出时,则需要包含头文件 iostream。在 iostream 中定义了用于输入输出的对象,例如常见的 cin 表示标准输入、cout 表示标准输出、cerr 表示标准错误。

使用 cout 进行输出时需要紧跟<<操作符,使用 cin 进行输入时需要紧跟>>操作符,这两个操作符可以自行分析所处理的数据类型,因此无需像使用 scanf 和 printf 那样给出格式控制字符串。

下面的示例代码给出了cin cout的基本用法:

#include<iostream>using namespace std;int main(void){    int x=0;    float y=0.0;    cout<<"Please input an integer number:"<<endl;    cin>>x;    cout<<"The integer number is:"<<x<<endl;    cout<<"Please input a float number:"<<endl;    cin>>y;    cout<<"The float number is:"<<y<<endl;}

其中endl表示换行,与C语言里的“\n”作用相同;当然这段代码中也可以用“‘\n’”来替代 endl。

当然cin 也可以进行连续输入,将cin>>x改为cin>>x>>y即可,输入时默认用空格隔开

二.new和delete操作符

C语言中用malloc和free来管理内存,在C++中又新增了new和delete两个操作符

C语言中,分配10个int空间的语句为:
int *p=(int *)malloc(10*sizeof(int));free(p);
C++中更为方便
int *p=new int[10];delete []p;
和 malloc() 一样,new 也是在堆区分配内存,必须手动释放,否则只能等到程序运行结束由操作系统回收。为了避免内存泄露,通常 new 和 delete、new[] 和 delete[] 操作符应该成对出现,并且不要和C语言中 malloc()、free() 一起混用。

三. C++函数重载

有时我们要实现的是同一类的功能,只是有些细节不同。例如希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。在C语言中,我们就要写出三个不同名字的函数,C++中,则没有这个必要,因为C++支持函数重载。

C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以。这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。
参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。

给出一段示例代码:
#include<iostream>using namespace std;int max(int a,int b,int c){    if(b>a)        a=b;    if(c>a)        a=c;    return a;}float max(float a,float b,float c){    if(b>a)        a=b;    if(c>a)        a=c;    return a;}int main(void){    int a=0,b=0,c=0,imax=0;    cin>>a>>b>>c;    imax=max(a,b,c);    cout<<"The max number is:"<<imax<<endl;    float d=0.0,e=0.0,f=0.0,fmax=0.0;    cin>>d>>e>>f;    fmax=max(d,e,f);    cout<<"The max number is:"<<fmax<<endl;}
由此可以看出,重载就是在一个作用范围内有多个名称一样但参数列表不同的函数,重载可以让一个程序段减少代码和方法种类。在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,使人莫名其妙。说明:参数列表不同包括个数不同、类型不同和顺序不同,仅仅参数变量名称不同是不可以的。

函数的重载的规则: 1. 函数名称必须相同。 2. 参数列表必须不同 3. 返回值可以不同 4. 如果只是返回值不同不能重载

函数重载的实现C++ 代码在编译时会根据参数列表对函数进行重命名,例如,int max(int, int, int) 会被重命名为 _max_int_int_int,double max(double, double, double) 会被重命名为 _max_double_double_double,所以在本质上来说它们还是不同的函数。

当发生函数调用时,编译器会根据参数列表去逐个匹配,以选择对应的函数,如果匹配失败,则编译器报错。这叫做重载分辨。

0 0