2015-02-05 11 views
6

Stavo leggendo un codice di progetto e ho trovato questo, qui MembersOfLibrary() è un costruttore di classe MenberOfLibraryChe cos'è ios :: in | ios :: out?

class MembersOfLibrary { 

    public: 
    MembersOfLibrary(); 
    ~MembersOfLibrary() {} 
    void addMember(); 
    void removeMember(); 
    unsigned int searchMember(unsigned int MembershipNo); 
    void searchMember(unsigned char * name); 
    void displayMember(); 
    private: 
    Members libMembers; 

}; 

MembersOfLibrary::MembersOfLibrary() { 

    fstream memberData; 
    memberData.open("member.txt", ios::in|ios::out); 
    if(!memberData) { 
    cout<<"\nNot able to create a file. MAJOR OS ERROR!! \n"; 
    } 
    memberData.close(); 
} 

io non sono in grado di comprendere il significato di -> ios :: in | ios :: out < - Please Help! Thank You

+0

Dai un'occhiata [qui] (http://www.cplusplus.com/reference/ios/ios_base/openmode/). – emlai

risposta

6
  • ios::in consente l'input (operazioni di lettura) da un flusso.
  • ios::out consente l'output (operazioni di scrittura) su un flusso.
  • | (operatore OR) viene utilizzato per combinare i due ios bandiere,
    senso che passa ios::in | ios::out al costruttore
    di std::fstream consente sia ingresso e uscita per il flusso.

cose importanti da notare:

  • std::ifstream ha automaticamente il set ios::in bandiera.
  • std::ofstream ha automaticamente il flag ios::out impostato.
  • std::fstream non ha né ios::in o ios::out automaticamente
    set. Ecco perché sono esplicitamente impostati nel codice di esempio.
+0

Perché abbiamo bisogno di OR bit a bit, solo un operatore OR logico non può essere utilizzato qui? –

+1

OR logico e bit a bit sono due cose completamente diverse. Un OR logico si occupa solo dei valori di 'bool'. Ad esempio, valuta la seconda espressione solo se la prima espressione viene valutata come 'false'. – emlai

+0

Mentre un OR bit a bit (che gestisce i valori interi) passa entrambi i valori bit per bit e imposta il bit nel valore risultante se il bit è stato impostato in uno dei due valori di input, ottenendo un effetto di combinazione. – emlai

2
memberData.open("member.txt", ios::in|ios::out); 

ios :: in viene utilizzato quando si desidera leggere da un file

ios :: out viene utilizzato quando si vuole scrivere in un file

ios :: in | ios :: out significa ios :: in o ios :: out, cioè a seconda di quale è richiesto è utilizzato

Ecco un link utile

http://www.cplusplus.com/doc/tutorial/files/

3

ios::in e ios::out sono openmode flags, e nel tuo caso combinato con un'operazione binaria o (|). Quindi il file viene aperto per la lettura e la scrittura.