GiaoTrinhC++(27Jun21)

(Hoang2711) #1
Ngôn ngữ lập trình C++

Tin Học Cho Mọi Người • 55

Ví dụ: #include
using namespace std;
class nhanvien { // class bố mẹ
private: int luong ; // quyền truy cập private
public: string tennv; };
class kythuat: public nhanvien { // class con cái
public: int thuong;
void setpay(int sotien) { luong = sotien; } // truy cập private bố mẹ
int getpay() { return luong; } };
int main() {
kythuat ktOne; ktOne.tennv = "Bac Ba Phi";
ktOne.setpay(50000); ktOne.thuong = 15000;
cout << "Ten NV: " << ktOne.tennv << "\n";
cout << "Luong: " << ktOne.getpay() << "\n";
cout << "Thuong: " << ktOne.thuong ;
return 0; }


Kết quả: errorvoid setpay(int sotien) : 'int nhanvien::luong' is private within this context{ luong = sotien; }

v   Ví dụ trên, class kythuat (derived class) là con cái kế thừa class nhanvien bố mẹ (base
class). Thuộc tính luong trong class nhanvien bố mẹ là quyền private. Phương thức setpay
trong class kythuat con cái (kế thừa) lại truy cập luong là biến private của bố mẹ nên
không được quyền, và dòng lịnh nầy gây ra lỗi như nêu trong kết quả.
v Thế nhưng khi thay quyền truy cập của luong trong class bố mẹ thành protected như
trong ví dụ sau thì mọi việc đều ổn.

Ví dụ: #include
using namespace std;
class nhanvien { // base class
protected: int luong ; // quyền truy cập protected
public: string tennv; };
class kythuat: public nhanvien { // derived class
public: int thuong;
void setpay(int sotien) { luong = sotien; }
int getpay() { return luong; } };
int main() {
kythuat ktOne; ktOne.tennv = "Bac Ba Phi";
ktOne.setpay(50000); ktOne.thuong = 15000;
cout << "Ten NV: " << ktOne.tennv << "\n";
cout << "Luong: " << ktOne.getpay() << "\n";
cout << "Thuong: " << ktOne.thuong ;
return 0; }


Kết quả:

Ten NV: Bac Ba Phi
Luong: 50000
Thuong: 15000
v Mặt khác, nếu trong class bố mẹ vẫn giữ quyền protected cho thuộc tính luong, nhưng
đưa cả hai phương thức setpay và getpay về với bố mẹ thì mọi việc đều ổn như trong ví
dụ sau, cho dù luong là private cũng ổn.
Free download pdf