Nội dung text Tips for implementing inheritance in C++.pdf
Object-Oriented Programming - LAB SED Page 1 How to call a base class method from a derived class (when method names are the same) Let's consider the following example with NhanVien as the base class and NhanVienKyThuat as the derived class. class NhanVien { private: string hoTen, diaChi; public: NhanVien(); NhanVien(const string& ht, const string& dc); ~NhanVien(); friend ostream& operator<<(ostream& os, const NhanVien& nv); }; NhanVien::NhanVien() { hoTen = ""; diaChi = ""; } NhanVien::NhanVien(const string& ht, const string& dc) { hoTen = ht; diaChi = dc; } NhanVien::~NhanVien() { } ostream& operator<<(ostream& os, const NhanVien& nv) { os << nv.hoTen << " (" << nv.diaChi << ")"; return os; } Implement the NhanVienKyThuat class class NhanVienKyThuat : public NhanVien { private: string chungChiNganh; public: NhanVienKyThuat(); NhanVienKyThuat(const string& ht, const string& dc, const string& cc); ~NhanVienKyThuat(); friend ostream& operator<<(ostream& os, const NhanVienKyThuat& nvkt); }; SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT
Object-Oriented Programming - LAB SED Page 3 Problems encountered when needing to call the correct method of the derived object class Let's consider an example of implementing area calculation methods for HinhChuNhat and HinhTron, which are derived from HinhHocPhang. class HinhHocPhang { public: HinhHocPhang() {} float TinhDienTich(); }; float HinhHocPhang::TinhDienTich() { return 0; } class HinhChuNhat : public HinhHocPhang { private: float chieuDai, chieuRong; public: HinhChuNhat(); HinhChuNhat(const float& cd, const float& cr); float TinhDienTich(); }; HinhChuNhat::HinhChuNhat() { chieuDai = chieuRong = 0; } HinhChuNhat::HinhChuNhat(const float& cd, const float& cr) { chieuDai = (cd == 0) ? 1 : abs(cd); chieuRong = (cr == 0) ? 1 : abs(cr); } float HinhChuNhat::TinhDienTich() { return chieuDai * chieuRong; } #define PI 3.14159 class HinhTron : public HinhHocPhang { private: float banKinh; SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT