// PL7/galaxy_wrong1.cpp // The definition of a galaxy on top of the celestial object class // Niels Walet, last updated 06/01/2022 #include<iostream> #include<string> using namespace std; class celestial_object { private: string name; double mass; double distance; double luminosity; public: celestial_object() : name{"no-name"}, mass{}, distance{}, luminosity{} {} celestial_object(const string nm, const double l, const double m, const double d) : name{nm}, mass{m}, distance{d}, luminosity{l}{} ~celestial_object(){} string name() {return name;} friend ostream& operator<<(ostream& , const celestial_object& ); }; class galaxy: public celestial_object { private: string hubble_type; long stars; public: galaxy() : name{"no-name"}, luminosity{}, mass{}, distance{}, hubble_type{"Sc"}, stars{} {} galaxy(const string nm, const double l, const double m, const double d, const string ht, const long nst) : name{nm}, luminosity{l}, mass{m}, distance{d}, hubble_type{ht}, stars{nst} {} ~galaxy(){} friend ostream& operator<<(ostream& , const galaxy& ); } ostream& operator<<(ostream& o, const galaxy& gx) {o <<" galaxy "<<gx.name() <<": "<<std::endl <<" Hubble type "<<gx.hubble_type <<" #stars "<<stars<<std::endl return o; } ostream& operator<<(ostream& o, const celestial_object& co) {o <<" mass "<<co.mass <<" Msun," <<" luminosity "<<co.luminosity <<" ," <<" distance (z) "<<co.distance <<std::endl; return o; } int main() { celestial_object LMC{"Large Magellanic Cloud",-1,2e10,0.000875}; std::cout <<LMC; return 0; } |