【c++自学笔记02】
cout的输出格式---相比C语言略复杂
#include <iostream>
#include <iomanip> //头文件
using namespace std;
int main(int argc, char const *argv[])
{
/* code */
//设置域宽 setw() 默认右对齐
cout<<"设置域宽 setw() 默认右对齐"<<endl;
cout<<"***********"<<endl;
cout<<setw(8)<<20<<endl<<endl<<endl;
//设置填充字符---这个填充字符指的是当输出的数据域宽没有我们设定的域宽那么大的时候填充的字符(默认为空格)
cout<<"设置填充字符---这个填充字符指的是当输出的数据域宽没有我们设定的域宽那么大的时候填充的字符(默认为空格)"<<endl;
cout<<setfill('x')<<setw(8)<<20<<endl<<endl<<endl;
//设置域宽 左对齐setioflag(ios::left)
cout<<"设置域宽 左对齐setioflag(ios::left)"<<endl;
cout<<"***********"<<endl;
cout<<setfill('x')<<setiosflags(ios::left)<<setw(8)<<300<<endl<<endl<<endl;
//cout输出浮点数时 默认是6个有效位
cout<<"cout输出浮点数时 默认是6个有效位! 注意是有效位,不是小数位"<<endl;
double a=1.0;
double b=3.0;
cout<<a/b<<endl;
a=4.0;
cout<<a/b<<endl<<endl<<endl;
// 十六进制(hex) 八进制(oct)输出
int n=16;
cout<<"十六进制 八进制输出"<<endl;
cout<<"十进制输出为:"<<n<<endl;
cout<<"八进制输出为:"<<oct<<n<<endl;
cout<<"十六进制输出为:"<<hex<<n<<endl<<endl<<endl;
return 0;
} 下面为上面程序运行的结果设置域宽 setw() 默认右对齐
***********
20
设置填充字符---这个填充字符指的是当输出的数据域宽没有我们设定的域宽那么大的时候填充的字符(默认为空格)
xxxxxx20
设置域宽 左对齐setioflag(ios::left)
***********
300xxxxx
cout输出浮点数时 默认是6个有效位! 注意是有效位,不是小数位
0.333333
1.33333
十六进制 八进制输出
十进制输出为:16
八进制输出为:20
十六进制输出为:10
-------------------------------------------------这是分割线-----------------------------------------------------------------------------------------------------
函数重载
1:定义:名称相同、参数(个数、类型、顺序)不同、意义不同;#include <iostream>
using namespace std;
int add(int a,int b)
{
cout<<"int add(int a,int b)"<<endl;
return a+b;
}
double add(double a,double b)
{
cout<<"double add(double a,double b)"<<endl;
return a+b;
}
int main(int argc, char const *argv[])
{
/* code */
int a=1,b=6;
double c=3.22,d=6.33;
cout<<add(a,b)<<endl;
cout<<add(c,d)<<endl;
return 0;
}
下面为上面程序运行的结果int add(int a,int b)
7
double add(double a,double b)
9.55
2:匹配原则:
#include <iostream>
using namespace std;
int add(int a,int b) //函数1
{
cout<<"int add(int a,int b)"<<endl;
return a+b;
}
double add(double a,double b)//函数2
{
cout<<"double add(double a,double b)"<<endl;
return a+b;
}
long add(long a,long b) //函数3
{
return a+b;
}
float add(float a,float b) //函数4
{
return a+b;
}
int main(int argc, char const *argv[])
{
/* code */
int a=1,b=6;
double c=3.22,d=6.33;
// 匹配原则1:严格匹配,找到则引用-----当三个函数都没有注释掉的时候,下面add则调用函数1 即严格匹配
cout<<add(a,b)<<endl;
//匹配原则2:通过隐式转换寻求一个匹配,找到则引用---当函数1、函数2 都注释掉的时候,下面整型的add则转换为long 调用
cout<<add(a,b)<<endl;
//注意 int可隐式转换为long 或 double 所以当函数1 不存在,而函数2和函数3同时存在的时候,系统就会报错---ambiguous(二义性)
//同理 double可隐式转换为int 或float 也需要注意
cout<<add(c,d)<<endl;
//匹配原则3:函数返回值类型不构成重载---因为我们很多时候使用函数并没有使用它的返回值。所以对系统而言也会产生二义性
return 0;
}

