SupperMary
V2EX  ›  C

问一个 C++运算符重载的问题

  •  
  •   SupperMary · Apr 4, 2019 · 3810 views
    This topic created in 2773 days ago, the information mentioned may be changed or developed.

    我已经在类里面重载了“>>”和“<<”运算符,在 main 函数通过 cin 和 cout 也确实能够从控制台输入输出,但是我想从文件输入输出怎么办?大概像下面这样,

    class A ……
    
    int main()
    {
        A varia;
        ifstream in;
        in.open("somefile");
        in>>varia;
    }
    
    

    搜索无果,猜测是不是需要多写一个文件输入的运算符重载?大概像下面这样

    friend std::ifstream& operator>>(std::ifstream& input, SomeClassName& D);
    

    求指教😶

    10 replies  •  2019-04-04 22:56:08 +08:00
    bccoder
    bccoder
    Apr 4, 2019 via Android
    1
    人生苦短,我来水一发
    aheadlead
    aheadlead
    Apr 4, 2019❤️1
    2
    直接 istream 或 ostream ?
    SupperMary
    SupperMary
    OP
    Apr 4, 2019
    3
    @aheadlead #2 不太能看懂你的意思,我能搜索的关于重载输入输出运算符的内容大都是这样的“ friend ostream &operator<<( ostream &output, const Distance &D )”,从 cin 和 cout 是能用的,但是我现在想弄成文件输入输出的。
    SupperMary
    SupperMary
    OP
    Apr 4, 2019
    4
    看 C++的 string 类里面的就是 istream,不是 ifstream,不知道我哪里错了。
    AngelCriss
    AngelCriss
    Apr 4, 2019 via Android
    5
    你猜得对,这是做反序列化
    catror
    catror
    Apr 4, 2019 via Android❤️1
    6
    不用重新重载,ifstream 就是继承的 istream
    SupperMary
    SupperMary
    OP
    Apr 4, 2019
    7
    @catror #6 好像我哪儿实现不太对,正在找问题在哪儿。
    SupperMary
    SupperMary
    OP
    Apr 4, 2019
    8
    结帖,代码是对的,但是 VS 调试时的路径是在项目目录下,不是可执行文件目录下,god。
    aheadlead
    aheadlead
    Apr 4, 2019 via iPhone
    9
    @SupperMary 在外面不好打字,你可以看看这个链接里的图 http://www.cplusplus.com/reference/iolibrary/

    他们是有继承关系的。
    hackpro
    hackpro
    Apr 4, 2019
    10
    在 Class A 的实现中加一个 operator>>
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    ♥ Do have faith in what you're doing.