ios_base:頂層基類
basic_ios<>:派生自ios_base的template class 。具體定義:
template<class charT, class traits = char_traits<charT> >class basic_ios :public class ios_base {};
basic_istream<> / basic_ostream<>:兩者虛擬派生自basic_ios<>的模版類。具體定義:
template<class charT, class traits = char_traits<charT> >class basic_istream :virtual public class basic_ios <charT, traits> {};
template<class charT, class traits = char_traits<charT> >class basic_ostream :virtual public class basic_ios <charT, traits> {};
basic_iostream<>:派生自basic_istream<>和basic_ostream<>的模版類。為了避免多重繼承中由多個父類共同的基類產生的二義性,所以basic_istream<> / basic_ostream<>需要虛擬派生自basic_ios<>。具體定義:
template<class _Elem,class _Traits>class basic_iostream: public basic_istream<_Elem, _Traits>, public basic_ostream<_Elem, _Traits> {}
basic_fstream<>:派生自basic_iostream<>的模版類。具體定義:
template<class _Elem, class _Traits>class basic_fstream : public basic_iostream<_Elem, _Traits> {}
basic_ifstream<>:派生自basic_istream<>的模版類。具體定義:
template<class _Elem, class _Traits>class basic_ifstream : public basic_istream<_Elem, _Traits> {}
basic_ofstream<>:派生自basic_ostream<>的模版類。具體定義:
template<class _Elem, class _Traits>class basic_ofstream : public basic_ostream<_Elem, _Traits> {}
我們熟悉的iostream、istream、ostream、fstream、ifstream、ofstream、ios都是上述模版類的特例型別。具體定義:
typedef basic_ios<char, char_traits<char> > ios;typedef basic_istream<char, char_traits<char> > istream;typedef basic_ostream<char, char_traits<char> > ostream;typedef basic_iostream<char, char_traits<char> > iostream;typedef basic_ifstream<char, char_traits<char> > ifstream;typedef basic_ofstream<char, char_traits<char> > ofstream;typedef basic_fstream<char, char_traits<char> > fstream;
寫這些,主要就是為了理清c++中stream classes的整個繼承體系。