C++-输入输出&&缺省参数

今天继续学习C++的输入输出和缺省参数部分,这个也是比较重要的一个部分!

3.C++的输入输出

1.使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间
注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用

推荐使用的版本

#include<iostream>//input ouput stream  输入输入流 C++输入输出头文件
using namespace std;//C++库的实现定义在一个叫std的命名空间中
//这样写 ==>把std这个命名空间的内容展开到全局

老版本

#include<iostream.h> // VC6.0 -> 比较老版本的库,没有命名空间的

2.使用C++输入输出更方便,不需增加数据格式控制,比如:整形--%d,字符--%c


c语言中使用scanf 和 printf进行输入输出,而C++也有输入输出,那就是cin 和 cout,其中cin是输入,搭配>>使用;cout是输出,搭配<<使用.


输出 cout

搭配 << 流插入运算符

#include<iostream>
//std命名空间的内容全局展开
using namespace std;
int main()
{
    cout << "Hello world\n" ;
    cout << "Hello world" << endl;//endl ->相当于\n
    cout << "Hello" << " " << "world" << endl;
    return 0;
}

#include<iostream>
//只展开std命名空间里面的cout和endl成员
using std::cout;
using std::endl;
int main()
{
    int a = 0;
    double d = 3.14;
    //自动识别变量的类型
    cout << "a  = "  << a  << " d = " << d<< endl;
    return 0;
}

image-20220910231814312


cout打印的默认就是你写的,不会把小数后面的也打印出来

int main()
{
    double d = 3.14;
    cout << "d = " << endl;
    return 0;
}

image-20220910231808574


输入 cin

搭配 >> 流提取运算符, cin也不可读取空格,会自动忽略 和scanf类似

#include<iostream>
//std命名空间的内容展开到全局
using namespace std;
int main()
{
    int a = 0;
    double b = 0;
    //自动识别类型
    cin >> a;
    cin >> b;
    printf("a = %d b = %.2lf\n", a, b);
    return 0;
}

image-20220910231802263


#include<iostream>
//只展开std命名空间里面的cin成员
using std::cin;
int main()
{
    int a = 0;
    double b = 0;
    cin >> a;
    cin >> b;
    printf("a = %d b = %lf\n", a, b);
    return 0;
}

4.缺省参数

概念

缺省参数是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参,


缺省参数的例子

void Test(int a = 0)
{
    cout<<"a = "<< a <<endl;
}
int main()
{
    Test();//没有传参时,使用参数的默认值
    Test(1);//传参时,使用指定的实参
    return 0;
}

image-20220910231755901


全缺省参数

所以参数都给了缺省值

void func(int x = 0, int y = 1)
{
    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
    cout << endl;
}

int main()
{
    func();
    func(3);
    func(3, 4);
    //func( ,4)//只给y赋值,x取默认值,err
    //不能在调用的时候指定传给谁
}

image-20220910231742738


半缺省参数

缺省部分参数,并且默认值必须从右往左依次给出

void func(int x, int y = 0)
{
    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
    cout << endl;
}
int main()
{
    func(1);
    func(1,2);
    //func();//err
}

image-20220910231736087


半缺省参数必须从右往左依次来给出,不能间隔着给

即:必须从右往左缺省,必须连续的缺省,不能跳着缺省

void func(int x = 0,int y,int z = 1)  //err
{}
void func(int x,int y = 0,int z)  //err
{}
void func(int x,int y ,int z = 0) //OK
{}

缺省参数不能在函数声明和定义中同时出现

//func.cpp中
void func(int x, int y = 0)
{}

//func.h中
void func(int x, int y = 0);

image-20220910231729973

原因:

如果声明与定义函数的位置同时出现缺省参数,恰巧两个位置提供的值不同,编译器就无法确定到底该用那个缺省值,

如:
  //func.cpp中
void func(int x, int y = 0)
{}

//func.h中
void func(int x, int y = 2);  

==解决办法==:要么在声明中写缺省参数,要么在定义中写缺省参数,推荐写在:声明,因为查看代码的时候一般先看它的声明

//func.cpp中
void func(int x, int y)
{
    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
    cout << endl;
}

//func.h中-写在声明里面
void func(int x, int y = 2);  

int main()
{
    func(1);
    func(3,4);
    return 0;
}

image-20220910231721129



缺省值必须是常量或者全局变量

//缺省值为全局变量
int c = 0;
void func(int x,int y = c)
{}

//缺省值为常量
void func(int x,int y = 1)
{}

  • 总结

1.半缺省参数必须从右往左依次来给出,不能间隔着给

2.缺省参数不能在函数声明和定义中同时出现

3.缺省值必须是常量或者全局变量

4.C语言不支持(编译器不支持)


使用缺省参数的好处(例子)

struct Stack
{
    int* a ;
    int capacity;
    int size;
}
//使用缺省参数
void StackInit(struct Stack* ps,int capacity = 4)
{
    ps- > a = (int*)malloc(sizeof(int)*capacity);
    ps -> size = 0;
    ps -> capacity = capacity;
}

int main()
{
    struct Stack st;
    //StackInit(&st);//不知道栈最多存多少数据,就用缺省参数初始化
    StackInit(&st,100);//知道栈最多存100个数据,用显示传值,这样可以减少增容次数,提高效率
}

增容是有代价的:realloc ():若后面空间不够,要重新开辟空间,把原空间数据拷贝过去,然后释放原空间

缺省参数函数相比于普通的函数调用时更灵活,比如在栈的初始化时可以通过传入指定的参数开辟对应大小的内存空间,如果不指定参数则开辟默认大小,

#C/C++#
全部评论
了解C++-输入输出&&缺省参数
点赞 回复 分享
发布于 2022-10-16 16:12 河南

相关推荐

珩珺:那些经历都太大太空了,实习的情况不了解,大创项目连名字、背景、目的及意义都没体现出来;地摊经济更是看完连卖的什么产品都不知道,项目成果直接写营收多少都更直观真实一点;后面那个校文体部的更是工作内容是组织活动整理流程,成果变成了当志愿者,而且你们学校本科学生会大一入学就直接当部长吗,志愿里面还提到了疫情防控,全面解封是22年12月的事情,可能时间上也有冲突。可能你花了钱人家就用AI给你随便写了点内容改了一下,没什么体现个性化的点
点赞 评论 收藏
分享
09-25 15:55
门头沟学院 Java
小肥罗:有道理哈哈真实真实
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务