c++输入输出+缺省参数

本文介绍了C++中的输入输出操作,对比了与C语言的区别,指出C++使用`cin`和`cout`进行输入输出,可以连续读写多个变量。同时,文章讲解了C++的缺省参数特性,如何提供函数的默认值,增强了函数使用的灵活性,并通过实例展示了全缺省和半缺省参数的用法。此外,还提及了在不同编译器中可能遇到的头文件包含问题,以及缺省参数声明和定义的注意事项。
摘要由CSDN通过智能技术生成

c++输入输出

不同于C语言的输入输出,C语言的输入输出要指定类型,scanf("%d", &a);printf("%d", a);

c++的输入输出:

int a = 0;

cin >> a;//>>是流提取操作符,等价于C语言的scanf("%d", &a);这行代码的官方说明叫流提取

cout << a;//<<是流插入操作符,等价于C语言的printf("%d", a);这行代码的官方说明叫流插入

更本质的内容要到类和对象才能了解。

c++输入的时候可以输入多个,而且不用指定类型:

int a = 0;

double b = 0;

cin >> a >> b;

cout << a << b << endl;

cout << a << b << '\n';//与上一行代码的含义是一样的

c++也可以格式化输出(比如控制小数点后输出的位数),但是很麻烦,有格式化输出的需求,按C语言的方式格式化输出就可以了。

有时候会看到#include<iostream.h>这是c++还没有命名空间时的版本,会在一些比较旧的编译器上出现,比如VC6.0

缺省参数

缺省参数的含义就是给函数形参赋值,所以缺省参数也叫默认参数。

void function(int a = 0)//这种行为很像备胎,有实参就不用,没有实参就用。

{

    cout << a << endl;

}

int main()

{

    function(1);

    function();//没有传参时,使用函数的默认值

    return 0;

}

还可以一次设立三个缺省参数,这样就有三种传参方式。

void function(int a = 10, int b = 20, int c = 30)//全部给了缺省参数叫做全缺省

{

    cout << "a = " << a << endl;

    cout << "b = " << b << endl;

    cout << "c = " << c << endl << endl;

}

int main()

{

    function();

    function(1);

    function(1, 2);

    function(1, 2, 3);

    return 0;

}

这个语法的意义在于更灵活,这是C语言没有的语法。但是不能只传b,必须要先传第一个才能传第二个。

与全缺省对应的是半缺省。

void function(int a, int b = 20, int c = 30)

{

    cout << "a = " << a << endl;

    cout << "b = " << b << endl;

    cout << "c = " << c << endl << endl;

}

int main()

{

    //function();在半缺省的情况下就就必须传参了

    function(1);

    function(1, 2);

    function(1, 2, 3);

    return 0;

}

半缺省不是缺省一半,而是部分缺省。半缺省不能说缺省a,不缺省b( void function(int a = 10, int b, int c = 30)),必须要从左往右连续的缺省。缺省是实参的缺省。缺省a就是a的实参可以缺省。

在数据结构的初始化中很适合用。这是之前C语言的栈初始化代码:

void StackInit(Stack* ps)

{

        assert(ps);

        ps->a = NULL;

        ps->top = 0;

        ps->capacity = 0;

}

使用缺省参数后:

void StackInit(Stack* ps, int n = 4)

{

        assert(ps);

        ps->a = (int*)malloc(sizeof(int) * n);

        ps->top = 0;

        ps->capacity = 0;

}

即使需要大一点的空间也可以在传实参的时候传较大的值,比原来的要灵活一点。

有的地方包头文件还会这么包:#include<cassert>

#include<cassert>与#include<assert.h>在c++中都可以用,区别在于后者没有命名空间。

windows下文件名的大小写是不区分的。

缺省参数的不能在声明和定义中同时出现。会出现歧义。

会发生重定义默认参数的错误。这个语法是为了防止在声明和定义中使用不同的缺省参数。

可以试一下,在声明不给,定义给;和定义不给,声明给的两种情况(函数的实现与主函数不在同一个项目中,或者函数的实现在主函数的下面(编译器只会向上查找))。

最后可以看到声明不给,定义给的情况编译是不通过的。

原因在于在编译阶段,只能看到函数声明(预处理阶段头文件展开,函数声明包含进项目中(每个.c和.cpp文件会生成目标文件)),函数声明中没有缺省参数,就会有语法报错。函数的定义是在链接阶段找。(不理解可以看看前面的博客:程序编译+链接的简单过程) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值