Bài học theo mô-đun (1/2)
Kế thừa trong C++
Kế thừa là một trong những trụ cột chính của Lập trình hướng đối tượng (OOP). Nó cho phép một lớp mới (được gọi là lớp dẫn xuất hoặc lớp con) kế thừa các thành viên (thuộc tính và phương thức) từ một lớp hiện có (được gọi là lớp cơ sở hoặc lớp cha), thúc đẩy việc tái sử dụng mã.
Cú pháp cơ bản
Trong C++, tính kế thừa được chỉ định bằng toán tử : sau tên lớp dẫn xuất, theo sau là bộ xác định truy cập (thường là public) và tên lớp cơ sở.
class Shape {
public:
void setColor(std::string c) {
color = c;
}
protected:
std::string color; // Accessible by derived classes
};
// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
double getArea() {
return width * height;
}
private:
double width {0.0};
double height {0.0};
};Công cụ xác định quyền truy cập: protected
Cùng với public và private, phần kế thừa giới thiệu công cụ xác định protected:
privatethành viên của lớp cơ sở không có thể truy cập trực tiếp từ lớp dẫn xuất.protectedcác thành viên của lớp cơ sở không thể truy cập được từ bên ngoài, nhưng có thể truy cập trực tiếp bên trong các lớp dẫn xuất.
Khởi tạo lớp cơ sở
Các nhà xây dựng không được kế thừa tự động. Khi khởi tạo một lớp dẫn xuất, hàm tạo của lớp cơ sở sẽ được gọi đầu tiên. Nếu lớp cơ sở yêu cầu đối số, chúng ta phải gọi nó một cách rõ ràng trong danh sách khởi tạo thành viên của hàm tạo dẫn xuất.
class Parent {
public:
Parent(int x) {
std::cout << "Parent: " << x << std::endl;
}
};
class Child : public Parent {
public:
// Explicit call to Parent constructor
Child(int x, int y) : Parent(x) {
std::cout << "Child: " << y << std::endl;
}
};Hãy tự mình thử
Tạo một lớp Dog kế thừa công khai từ lớp Animal. Lớp Dog phải bao gồm một phương thức public play() in ra 'Playing' bằng cách sử dụng std::cout.
Hiển thị gợi ý
Sử dụng cú pháp `:` theo sau là `public Animal` để mở rộng lớp cơ sở, sau đó viết phương thức `play()`.
Giải pháp khả dụng sau 3 lần thử
Hoàn thành lớp Xe bằng cách kế thừa từ Xe. Viết một hàm tạo cho Car chấp nhận std::string b và chuyển nó đến hàm tạo Vehicle thông qua danh sách trình khởi tạo thành viên.
Hiển thị gợi ý
Trong hàm tạo `Car`, hãy sử dụng cú pháp `: Vehicle(b)` ngay sau dấu ngoặc đơn tham số để ủy quyền khởi tạo thương hiệu cho lớp cơ sở.
Giải pháp khả dụng sau 3 lần thử