牛骨文教育服务平台(让学习变的简单)
博文笔记

浅谈cin与cout

创建时间:2015-08-05 投稿人: 浏览次数:520

今天开始看了c++ ,第一章看到说cin.get()可以这样用,我猜测:那这样不就是说明cin是一个对象吗,然后调用他的iostream的类中的get函数

于是我试图找到iostream.h这个头文件,找啊找,找啊找,没找到我想要的cin这个声明对象。

于是看到#inlcude <istream.h> 

终于在这个头文件中找到了

class _CRTIMP istream : virtual public ios {

public:
    istream(streambuf*);
    virtual ~istream();

    int  ipfx(int =0);
    void isfx() { unlockbuf(); unlock(); }

    inline istream& operator>>(istream& (__cdecl * _f)(istream&));
    inline istream& operator>>(ios& (__cdecl * _f)(ios&));
    istream& operator>>(char *);
    inline istream& operator>>(unsigned char *);
    inline istream& operator>>(signed char *);
    istream& operator>>(char &);
    inline istream& operator>>(unsigned char &);
    inline istream& operator>>(signed char &);
    istream& operator>>(short &);
    istream& operator>>(unsigned short &);
    istream& operator>>(int &);
    istream& operator>>(unsigned int &);
    istream& operator>>(long &);
    istream& operator>>(unsigned long &);
    istream& operator>>(float &);
    istream& operator>>(double &);
    istream& operator>>(long double &);
    istream& operator>>(streambuf*);

    int get();

    inline istream& get(         char *,int,char ="
");
    inline istream& get(unsigned char *,int,char ="
");
    inline istream& get(  signed char *,int,char ="
");

    istream& get(char &);
    inline istream& get(unsigned char &);
    inline istream& get(  signed char &);

    istream& get(streambuf&,char ="
");
    inline istream& getline(         char *,int,char ="
");
    inline istream& getline(unsigned char *,int,char ="
");
    inline istream& getline(  signed char *,int,char ="
");

    inline istream& ignore(int =1,int =EOF);
    istream& read(char *,int);
    inline istream& read(unsigned char *,int);
    inline istream& read(signed char *,int);

    int gcount() const { return x_gcount; }
    int peek();
    istream& putback(char);
    int sync();

    istream& seekg(streampos);
    istream& seekg(streamoff,ios::seek_dir);
    streampos tellg();

    void eatwhite();


再往下看,找到了cin对象的声明

extern _CRTIMP istream_withassign cin;


这个是public中的代码,也就是说

在我们调用iostream的时候,iostream中会包含istream和ostream

又因为操作运算符》重载 以及 get()等函数也在public中,并且cin对象为extern 

所以我们才可以直接输入或者输出 ,或者调用一些函数,比如 cin.get()


istream& operator>>(char *);
    inline istream& operator>>(unsigned char *);
    inline istream& operator>>(signed char *);
    istream& operator>>(char &);
    inline istream& operator>>(unsigned char &);
    inline istream& operator>>(signed char &);
    istream& operator>>(short &);
    istream& operator>>(unsigned short &);
    istream& operator>>(int &);
    istream& operator>>(unsigned int &);
    istream& operator>>(long &);
    istream& operator>>(unsigned long &);
    istream& operator>>(float &);
    istream& operator>>(double &);
    istream& operator>>(long double &);
    istream& operator>>(streambuf*);

从这里大家也看到了,为什么说cin和cout可以不管后者的变量的类型,可以直接输入或输出,而不用像scanf和printf那样繁琐

他把每种类型都包含进去了。至于什么是istream&  这些东西我不懂,我只是这样猜测的。

^_^望大神给予指导

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。