good(): Returns nonzero (true) if no error has occurred. For instance, if fin.good() is true, everything is okay with the stream named as fi and we can proceed to perform I/O operations. When it returns zero, o further operations can be carried out.
bad(): Returns true if a reading or writing operation fails. For example in the case that we try to write to a file that is not open for writing or if the device where we try to write has no space left.