为什么 istream、ostream、iostream、ios_base 都在这里工作

why istream,ostream,iostream,ios_base all work here

int main()
{
int a=0;
int b=0;
std::cout<<"Please enter an int: "<<std::endl;
std::cin>>a;
auto old_state =std::cin.rdstate(); // remember the current state of cin
std::cin.clear(); // make cin valid
std::cout<<"Please enter another int: "<<std::endl;
std::cin>>b;// use cin
auto new_state = std::cin.rdstate();
if(old_state==std::istream::failbit&&new_state==std::istream::failbit) 
//I tried std::ostream,std::iostream,ios_base they all work.
std::cout<<"Both are failbit!"<<std::endl;
}

我刚看到 C++ Primer 上的 IO 章节。我自己试了这段代码,惊奇地发现最后两行,我把std::istream改成了std::ostreamstd::iostreamstd::ios_base,当我输入的时候,它们似乎都有效在两个 char 中。请有人帮助用简单的语言解释为什么会发生这种情况。非常感谢!

因为 failbitios_basepublic 成员,而所有其他 类 public 都继承自 ios_base