C++基础——输入输出和缺省参数讲解

上篇文章中,我们学习了C++的域名空间,这次继续来学习C++的基础知识。

目录

一.C++的输入输出

总结:

二.缺省参数

全缺省案例:

部分缺省案例:


一.C++的输入输出

例:

#include<iostream>
using std::cout;
using std::cin;
using std::endl;

int main() {
	cout << "Hello World" << endl;

	int a;
	double b;
	char c;

	cin >> a;
	cin >> b >> c;
    
    cout<<a<<b<<c<<endl;
    return 0;
    }

 

        由结果可知:cout和cin具有可以自动识别变量的类型的功能,这是C++优于C语言的printf和scanf,但这也是它的缺点所在,cout不能够控制小数的位数,不能轻易输出字符变量c的ASCII码值,而printf可以。


    int main(){
    int a;
	double b;
	char c;

	//C++的输入输出可以自动识别变量的类型
	cin >> a;
	cin >> b >> c;

	cout << "C++版本的输出:" << endl;
	cout << "int a : "<< a<<endl;
	cout <<"double b : " << b << " char c : " << c << endl;

	cout << " ——————————————————————————————"<<endl;

	printf("C的输出:\n");
	printf("int a:%d\n", a);
	printf("double b:%.2lf\n", b);
	printf("char c:%d\n", c);

    }

         

 但C++是兼容C语言的,我们可以将cin和printf混合着用,方便又快捷。

对于以上这些,我对C++的输入输出做个总结:

1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件 以及按命名空间使用方法使用std。

2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。

3. >>是流提取运算符;<<是流插入运算符。

4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。 C++的输入输出可以自动识别变量类型。

5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识, 这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。

二.缺省参数

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

例:

void F(int a = 0) {    //函数缺省形参
	cout <<"a的值为:"<< a << endl;
}
int main() {
	F();	//缺省——省去实参赋值传递,系统会默认调用形参给出的值
	F(10);	//未缺省——使用实参的值,那么调用时就不会使用形参的值了
	return 0;
}

  

全缺省案例:

void F(int a = 10, int b = 20, int c = 30) {    //全缺省形参
	cout << "  a="<<a << "  b=" << b << "  c=" << c << endl;
}
int main() {
	F();	        //完全缺省——一个实参也不传
	F(17);	        //缺省两个,17只能赋给变量a去使用
	F(17, 29);    	//17赋给a,	29赋给b
	F(17, 29, 63);	//未缺省
	return 0;
}

 //注:给值时只能从左到右给,不能给a,c不给b!!!

 还有就是:实参值传给形参的使用权限要大于使用缺省参数给出的值,所以一旦实参给出了值,编译器就不会再使用缺省参数给出的值!

部分缺省案例:

void F(int a, int b=15, int c = 30) {
	cout << "  a=" << a << "  b=" << b << "  c=" << c << endl;
}

int main() {
	F();    ——报错,因为形参a在函数种本就没有值,所以实参必须给值,否则报错	
	F(17);	
	F(17, 29);	
	F(17, 29, 63);	
	return 0;
}

部分缺省的核心:从右往左连续缺省,也就是说当有一个的实参没传时,那么这个函数对应位置的形参一定处在最左边,即至少要给函数F传一个值及以上。

        若是非要只给b缺省也可以:void F(int a=20, int c int b=15){}       把c写到b前面即可。

        此外还要注意:缺省参数的函数在进行声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,这是为什么?

例:

.h文件

#include<assert.h>
#include<stdlib.h>

namespace bit {
	typedef struct Stack {
		int* a;
		int size;
		int capacity;
	}ST;

    //函数声明
	void StackInit(ST* pst, int capa=4);
	void StackPush(ST* pst, int x);
}

.cpp文件

#include"Stack.h"

namespace bit {

	
		void StackInit(struct Stack* pst, int Capa=4) {
		pst->a = (int*)malloc(sizeof(int) * Capa);
		assert(pst->a);
		pst->size = 0;
		pst->capacity = Capa;
	}


	void StackPush(struct Stack* pst, int x){
    //.....
}

 

        声明和定义同时出现缺省参数值,就会报错。原因就是因为在编写代码的过程中万一声明中写出的缺省参数值和定义中写出的缺省参数值不一致,有异议,系统就不知道该执行哪一个,所以以后缺省参数统一在声明中写,它只认定声明的缺省参数。 

 

 

      

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙予清的zzz~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值