Lớp Dẫn Xuất (derived Class) Trong Lập Trình Hướng đối Tượng Với C++
Có thể bạn quan tâm
1. Truy nhập các thành phần trong lớp dẫn xuất
Các thành phần của lớp dẫn xuất (derived class) gồm các thành phần khai báo trong lớp dẫn xuất và các thành phần kế thừa được từ lớp cơ sở. Các đối tượng của lớp dẫn xuất có thể truy cập các thành phần của nó thông qua toán tử chấm “.”.#include <iostream> using namespace std; class A{ private: int biena; public: void hama(){ biena = 0; cout<<"Gia tri cua bien a = "<<biena<<endl; } }; class B: public A{ private: int bienb; public: void hamb(){ bienb = 1; cout<<"Gia tri cua bien b = "<<bienb<<endl; } }; void main(){ B bobject; //truy cập các thành viên bobject.hama(); bobject.hamb(); system("pause"); }
Kết quả
Gia tri cua bien a = 0 Gia tri cua bien b = 12. Định nghĩa lại hàm thành phần của lớp cơ sở trong lớp dẫn xuất
Trong lớp dẫn xuất (derived class) có thể định nghĩa lại hàm thành phần của lớp cơ sở mà nó thừa kế được. Như vậy, sẽ có hai phiên bản khác nhau của hàm thành phần trong lớp dẫn xuất. Trong phạm vi lớp dẫn xuất, hàm định nghĩa lại trong lớp dẫn xuất sẽ ghi đè (overriding) lên hàm được định nghĩa trong lớp cơ sở.#include <iostream> using namespace std; class A{ private: int biena; public: void hama(){ biena = 0; cout<<"Gia tri cua bien a = "<<biena<<endl; } void nhap(){ cout << "\nNhap gia tri cua bien a = "; cin >> biena; } void hienthi(){ cout<<"\nGia tri cua bien a = "<<biena; } }; class B: public A{ private: int bienb; public: void hamb(){ bienb = 1; cout<<"Gia tri cua bien b = "<<bienb<<endl; } void nhap(){ cout << "\nNhap gia tri cua bien b = "; cin >> bienb; } }; void main(){ B bobject; bobject.nhap(); bobject.A::nhap(); system("pause"); }
Kết quả
Nhap gia tri cua bien b = 5 Nhap gia tri cua bien a = 9Trong ví dụ trên, lớp B kế thừa public từ lớp A. Lớp B định nghĩa lại hàm nhap() kế thừa được từ lớp A. Lúc này, đối tượng của lớp B là bobject gọi hàm nhap() bằng toán tử chấm “.” với lệnh bobject.nhap(). Hàm nhap() được gọi là hàm nhap() được định nghĩa lại trong B.
Nếu bobject muốn gọi hàm nhap() của lớp A thì phải dùng lệnh bobject.A::nhap(). Tức là phải chỉ rõ hàm nhap() thuộc lớp cơ sở A.
3. Hàm khởi tạo và hàm hủy trong kế thừa
Các hàm khởi tạo (constructor) của lớp cơ sở không được kế thừa. Tuy nhiên, một đối tượng của lớp dẫn xuất về thực chất có thể xem là một đối tượng của lớp cơ sở. Vì vậy, việc gọi hàm khởi tạo lớp dẫn xuất để tạo đối tượng của lớp dẫn xuất sẽ kéo theo việc gọi đến một hàm khởi tạo của lớp cơ sở. Hàm khởi tạo của lớp cơ sở được gọi trước rồi đến hàm khởi tạo của lớp dẫn xuất.
Hàm hủy (destructor) của lớp cơ sở cũng không được kế thừa. Hàm hủy của lớp dẫn xuất thực thi trước hàm hủy của lớp cơ sở.#include <iostream> using namespace std; class LopCoSo{ public: LopCoSo(){ cout << "Ham khoi tao cua lop co so!" << endl; } ~LopCoSo(){ cout << "Ham huy cua lop co so!" << endl; } }; class LopDanXuat : public LopCoSo{ public: LopDanXuat(){ cout << "Ham khoi tao cua lop dan xuat!" << endl; } ~LopDanXuat(){ cout << "Ham huy cua lop dan xuat!" << endl; } }; void main(){ LopDanXuat obj; }
Kết quả
- Thuật toán tìm kiếm nhị phân (Binary Search)
- Kỹ thuật lập trình với mảng cấu trúc và truyền cấu trúc cho hàm
- Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết
- Xây dựng lớp trong Java với nạp chồng (overloading) và kết tập (aggregation)
- Cách tạo mảng (array) và thao tác với mảng trong PHP
Từ khóa » Khai Báo Lớp Kế Thừa Trong C++
-
Kế Thừa Trong C++ | TopDev
-
Tính Kế Thừa Trong C++ - Học Lập Trình C++ Online - VietTuts
-
Tính Kế Thừa Trong C++ - Lập Trình Không Khó
-
Kế Thừa Trong C++
-
Tính Kế Thừa Trong C++ (C++ Inheritance) | Ironhack Việt Nam
-
Tính Kế Thừa Trong Lập Trình Hướng Đối Tượng - CodeLearn
-
Chi Tiết Bài Học Kế Thừa Trong C++ - Vimentor
-
Đa Kế Thừa - Lập Trình C++
-
Tính Kế Thừa Trong C++
-
Tính Kế Thừa Trong C++
-
C++ Hỗ Trợ đa Kế Thừa Trong Lập Trình Hướng đối Tượng - Góc Học IT
-
Các Kiểu Kế Thừa Trong C++ - TEK4
-
Thừa Kế Trong C++ - Viblo
-
Tính Kế Thừa Trong Lập Trình Hướng đối Tượng