// iostream iofstream iostringstream.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <istream>
#include <ostream>
#include <iostream>
#include <typeinfo>
class complex
{
public:
double real;
double imag;
};
class ciostream
{ //自定义重载了复数complex类型的控制台窗口IO流 纯操作流 无数据 读取输出控制台窗口
public:
ciostream& operator>>(complex& obj)
{
std::cin>>obj.real>>obj.imag;
return *this;
};
ciostream& operator<<(complex& obj)
{
std::cout<<obj.real<<(obj.imag>0?" +":" -")<<abs(obj.imag)<<'i'<<"和";
return *this;
};
};
int _tmain(int argc, _TCHAR* argv[])
{
ciostream cin,cout;
complex c1,c2;
/*cin>>c1>>c2;
cout<<c1<<c2;*/
enum myenum{ first=1,second,third};
int a;
//decltype(std::cin) mycin; //编译错 类std::basic_istream不存在默认构造函数
std::cin>>a;
while(1){
std::istream::iostate; //前一个::用于访问名字空间std中的istream这个类型名
//后一个::用于访问istream类的iostate成员 是一种类内部定义的枚举类型名
const type_info& t0=typeid(std::istream::iostate);
std::cout<<t0.name()<<std::endl; //int
const type_info& t1=typeid(myenum); //枚举类型名
std::cout<<t1.name()<<std::endl; //?AW4myenum@?1?wmain@
const type_info& t2=typeid(second); //枚举数据
std::cout<<t2.name()<<std::endl; //?AW4myenum@?1?wmain@
const type_info& t=typeid(std::cin.badbit);
//typeid()返回const type_info类对象并且不能拷贝不能自己构造所以左值必须用const type_info&
std::cout<<t.name()<<std::endl; //控制台窗口输入'1'时输出enum std::_Iosb<int>::_Iostate
std::cout<<std::cin.badbit<<std::endl;
//^当控制台窗口输入'1'为4 输入"1.2"为4 输入'a'也为4
std::cout<<std::cin.failbit<<std::endl; //指出一个IO操作失败了
//^当控制台窗口输入'1'为2 输入"1.2"为2 输入'a'为2
std::cout<<std::cin.eofbit<<std::endl;
//^当控制台窗口输入'1'为1 输入"1.2"为1 输入'a'为1
std::cout<<std::cin.goodbit<<std::endl;
//^用来指出流未处于错误状态。此值保证为零
std::cout<<std::cin.eof()<<std::endl;
//^当控制台窗口输入'1'为0 输入"1.2"为0 输入'a'为0
//若流对象std::cin的eofbit置位则返回true
std::cout<<std::cin.fail()<<std::endl;
//^当控制台窗口输入'1'为0 输入"1.2"为0 输入'a'为1(此时发生置位)
//若流对象std::cin的failbit或badbit置位则返回true
std::cout<<std::cin.bad()<<std::endl;
//^当控制台窗口输入'1'为0 输入"1.2"为0 输入'a'为0
//若流对象std::cin处于有效状态则返回true
std::cin.setstate(std::cin.badbit); //将cin流对象中给定的badbit条件状态位复位
std::cin.clear(); //s.clear()将cin流对象所有条件状态位复位 返回void
std::cin.rdstate();//返回流std::cin的当前条件状态 返回值类型为std::cin流类::iostate
break;
std::cin>>a;
}
system("pause");
return 0;
}
为自定义复数类定义类似标准输入输出流iostream的cin cout流类对象并重载《》运算符 探讨iostream流类的::iostate等成员物理意义
最新推荐文章于 2024-01-25 11:42:16 发布