404NOT 发表于 2018-9-2 19:39:03

cout自动识别

最近心血来潮自学C++奈何碰到一些问题{:5_104:}



我这样使用cout是错误的吗,我知道 如果把   int ch; 改成 char ch; 就会运行正确的输出结果, 但是   getchar 函数返回的是整型, 整型要求我去赋值给字符型(我才不干嘞!) 于是乎我考虑了一个问题,cout应该具有自动识别数据类型的功能吧,不然怎么能做到不格式化就可以输出呢?{:10_249:}   况且,在我看来,char 只不过是八位的整型罢了.一家人才对! 有没有精通(滑稽)C++的大佬指点迷津哇!?__CRT_INLINE __cdecl __MINGW_NOTHROWint getchar (void)

404NOT 发表于 2018-9-2 20:03:53

我想了一会儿,觉得这样也是很合理的,至于getchar为何会设计成返回整型,C陷阱和缺陷第八十四页有写。

claws0n 发表于 2018-9-2 20:37:06

char ch;
(ch = (char)getchar() != '\n')??
EOF 的关系

iostream 都载了…… int 跟 iostream 的大小完全不能比~

moc 发表于 2018-9-2 20:52:47

本帖最后由 moc 于 2018-9-2 20:54 编辑

ostream& operator<<(ostream &out, 类名 &name)   
cout<<可以这样重载的,这样你定义的新的类都可以通过这种方式,把你想要打印出来的东西打印下来。

404NOT 发表于 2018-9-2 21:07:42

moc 发表于 2018-9-2 20:52
ostream& operator

确定类型的关键字是哪个。

人造人 发表于 2018-9-3 00:16:03

#include <iostream>

namespace Test
{
        class ostream
        {
        public:
                ostream &operator<<(int num)
                {
                        printf("%d", num);
                        return *this;
                }
                ostream &operator<<(char ch)
                {
                        putchar(ch);
                        return *this;
                }
                ostream &operator<<(ostream &(*pf)(ostream &out))
                {
                        return pf(*this);
                }       
        };

        ostream cout;

        ostream &endl(ostream &out)
        {
                putchar('\n');
                fflush(stdout);
                return out;
        }
};

int main()
{
        int ch1 = 'a';
        char ch2 = 'a';
        Test::cout << ch1 << Test::endl;
        Test::cout << ch2 << Test::endl;

        return 0;
}


97
a
请按任意键继续. . .



Test::cout << ch1 << Test::endl;    // 调用的是 ostream &operator<<(int num)

Test::cout << ch2 << Test::endl;    // 调用的是 ostream &operator<<(char ch)
页: [1]
查看完整版本: cout自动识别