【无标题】

这里写目录标题

I/O控制

使用控制符

控制符 (manipulators)可以对I/O流的格式进行控制。控制符是在头文件iomanip 中定义的对象。可以直接将控制符插入流中。常用控制符如表2-4所示

控制浮点数值显示

第8行输出用scientific来表示指数表示的输出形式。其有效位数沿用上次的设置值8

小数位数截短显示时,进行四舍五入处理

cpp 复制代码
#include <iostream>
#include<iomanip>

using namespace std;

int main()
{
    double a = 123.45678913;
    cout << a << endl;
//    cout << setiosflags(ios::scientific) << a << endl;
//    cout << resetiosflags(ios::scientific);
    cout << setiosflags(ios::fixed) << a << endl;
    cout << setprecision(2) << setiosflags(ios::fixed) << a << endl;
    cout << setprecision(12) << setiosflags(ios::fixed) << a << endl;
    system("pause");;
    return 0;
}

scientific设置浮点数以科学计数法形式输出,fixed使此时的精度域表示小数位数,原本的精度域是包括整数与小数一起的

最原始情况,6位有效数字

fix之后,默认小数点后6位

scientific要取消,取消后延用之前的精度情况

设置值的输出宽度

输出八进制数和十六进制数⭐

uppercase 可以控制十六进制数大写输出 。例如,在上例中对十六进制数进行大写控制

要输出不同进制的数值,需要先unsetf取消当前进制,setf设置当前进制

如果忘记取消当前进制,即使设置了,也不起作用,但是,经过测试,当需要从别的进值转化为十进制格式时,不需要unsetf别的进制,也可以输出正确的十进制格式

其实就是,如果忘记取消当前进制,默认的输出格式是十进制,而不是上次设置的进制格式,而后再进行 取消设置的操作,输出的都是十进制

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
    int a = 0x12345678;
    cout.unsetf(ios::dec);
    cout.setf(ios::hex);
    cout << "十六机制: " << a << endl;
    cout.unsetf(ios::hex);
    cout.setf(ios::oct);
    cout << "八机制: " << a << endl;
    cout.unsetf(ios::oct);
    cout.setf(ios::dec);
    cout << "十机制: " << a << endl;
    
    cout.unsetf(ios::dec);
    cout.setf(ios::hex);
    cout << "十六机制: " << a << endl;
    
//    cout.unsetf(ios::oct);
    cout.setf(ios::dec);
    cout << "十机制: " << a << endl;
    
//    cout.unsetf(ios::hex);
    cout.setf(ios::oct);
    cout << "八机制: " << a << endl;
    

    system("pause");
    return 0;
}

例题

cpp 复制代码
#include <iostream>
using namespace std;
int main() {
 int i = 100;
 cout.unsetf(ios::dec);
 cout.setf(ios::hex);
 cout << i << "\t";
 cout << i << "\t";
 cout.setf(ios::dec);
 cout << i << "\t";
 return 0;
}
程序运行后的输出结果是()

设置填充字符

左右对齐输出

cpp 复制代码
cout<<left<<setw(5)<<1
		  <<setw(5)<<2
		  <<setw(5)<<3<<endl;
cpp 复制代码
#include <iostream>
#include<iomanip>
using namespace std;

int main()
{
    int a = 123;
    cout<<setiosflags(ios::left)<<setw(5)<<1
		  						<<setw(5)<<2
		  						<<setw(5)<<3<<endl;
	cout<<left<<setw(5)<<1
		  <<setw(5)<<2
		  <<setw(5)<<3<<endl;
    cout << setiosflags(ios::left) << setfill('*') << setw(6) << a << "---" << endl;
    cout << setiosflags(ios::right) << setfill('*') << setw(5) << a << "---" << endl;
    system("pause");
    return 0;
}

showpoint强制显示小数位,showpos强制显示正负。

cpp 复制代码
#include <iostream>
#include<iomanip>
using namespace std;

int main()
{
    double a = 10 / 5;
    double b = 26.0 / 7;
    cout << a << endl;
    cout << showpoint << a << endl;
    cout << setiosflags(ios::showpoint) << a << endl;
    cout << b << endl;
    cout << showpos << b << endl;
    cout << setiosflags(ios::showpos) << b << endl;
    system("pause");
    return 0;
}

setiosflags(ios::showpoint) 等价 showpoint

setiosflags(ios::left) 等价 left

成员函数 ostream put(char)

功能: 输出一个字符

cpp 复制代码
#include <iostream>
#include<iomanip>

using namespace std;

int main()
{
    char buf[] = "hello world";
    for (int i = sizeof(buf) / sizeof(char) - 2; i >= 0; i--)
        cout.put(*(buf + i));
    cout.put('\n');
    system("pause");;
    return 0;
}
cpp 复制代码
cout.flush()//刷新缓冲区
cout.put()//向缓冲区写一个字符
cout.write()//向缓冲区写字符串
cout.width()//设置输出长度
cout.fill()
cout.setf(标记)//设置输出格式
cout.unsetf(标记)//卸载输出格式

作用域区分符 ::

∷叫作用域区分符 ,指明一个函数属于哪个类或一个数据属于哪个

类。∷可以不跟类名,表示全局数据或全局函数(即非成员函数)

std是一个命名空间(namespace),'::'是作用域运算符,cout是std空间中的一个函数名。使用cout时,必须有使用std命名空间的说明,有两种说明方式。

方式一:每次使用时对cout说明:

std::cout << "Input two numbers:";

方式二:在主函数前说明一下,后面就可以直接使用cout:

using namespace std;

cout << "Input two numbers:";

原文链接:https://blog.csdn.net/qq_28117589/article/details/122188221

可用于在类之后定义成员函数

函数模板

cpp 复制代码
#include <iostream>
#include <string>

using namespace std;

template<typename T>
T add(T x, T y)
{
    return x + y;
}

int main()
{
    cout << add(5, 3) << endl; //自动推断类型
    cout << add<double>(5, 7.8) << endl; //歧义性
    cout << add<string>("hello", " world") << endl;
}

函数的重载

作用:函数名可以相同,提高复用性

函数重载满足条件:

同一个作用域下
函数名称相同
函数参数类型不同 或者 个数不同 或者 顺序不同

注意:

1、函数的返回值不可以作为函数重载的条件

原因就是:编译器在编译时,不会去判断函数的返回类型!也就是说你返回类型虽然不同,但是只有函数调用以后,编译器才去验证返回类型。

2、函数重载遇上引用

2.1 引用做为重载条件

2.2 函数重载碰到函数默认参数

同名的函数,只要它们的形参列表不同

函数名+形参列表 构成了函数的签名,与返回类型无关,不能以返回类型区分函数

cpp 复制代码
//#include <bits/stdc++.h>
#include <iostream>
using namespace std;
//函数重载的注意事项
//1、引用作为函数参数
void func(int &a)
{
    cout << "函数function(int a)的调用" << endl; 
}

void func(const int& a)
{
    cout << "函数function(const int a)的调用" << endl;
}
//2、函数重载碰到默认参数
void test(int a)
{
    cout << "函数test(int a)的调用" << endl;
}
void test(int a,int b=10)
{
    cout << "函数test(int a,int b=10)的调用" << endl;
}
int main()
{
    int a = 10;
    func(a);//实际参数a变量可读可写,传入函数后走可读可写的函数
    func(10);//实际参数10是常量 若走int &a=10;不合法,引用无效;但能走const int &a=10;
    test(10, 20);
    
    test(10);//错误,两个函数都能被调用。ambiguous出现二义性
	
//    system("pause");
return 0;
}
相关推荐
迷迭所归处2 小时前
C++ —— 关于vector
开发语言·c++·算法
CV工程师小林3 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
white__ice3 小时前
2024.9.19
c++
天玑y3 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
姜太公钓鲸2334 小时前
c++ static(详解)
开发语言·c++
菜菜想进步4 小时前
内存管理(C++版)
c语言·开发语言·c++
Joker100854 小时前
C++初阶学习——探索STL奥秘——模拟实现list类
c++
科研小白_d.s4 小时前
vscode配置c/c++环境
c语言·c++·vscode
湫兮之风4 小时前
c++:tinyxml2如何存储二叉树
开发语言·数据结构·c++
友友马5 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http