Computer >> Máy Tính >  >> Lập trình >> C ++

ghi đè Từ khóa trong C ++

Chức năng ghi đè là tính năng phổ biến nhất của C ++. Về cơ bản ghi đè hàm có nghĩa là xác định lại một hàm có trong lớp cơ sở, cũng được định nghĩa trong lớp dẫn xuất. Vì vậy, các chữ ký chức năng giống nhau nhưng hành vi sẽ khác nhau.

Nhưng có thể xảy ra trường hợp lập trình viên mắc lỗi khi ghi đè chức năng đó. Giống như nếu chữ ký không giống, thì đó sẽ được coi là một hàm khác, nhưng không phải là phương thức được ghi đè hoặc phương thức đó. Trong trường hợp đó, chúng ta có thể sử dụng từ khóa ghi đè. Từ khóa này được giới thiệu trong C + +11. Khi trình biên dịch tìm thấy loại từ khóa này, nó có thể hiểu rằng đây là phiên bản ghi đè của cùng một lớp.

Hãy để chúng tôi xem ví dụ để hiểu khái niệm.

Ví dụ

#include <iostream>
using namespace std;
class BaseClass{
   public:
      virtual void display() {
         cout << "Displaying from Base Class\n";
      }
};
class DerivedClass : public BaseClass{
   public:
      void display() {
         cout << "Displaying from Derived Class\n";
      }
};
main() {
   BaseClass *b_ptr;
   b_ptr = new DerivedClass();
   b_ptr->display();
}

Đầu ra

Displaying from Derived Class

Trong trường hợp này, chương trình hoạt động tốt vì các chữ ký đều giống nhau. Trong ví dụ sau, chữ ký sẽ khác. Đối với từ khóa ghi đè, nó sẽ tạo ra lỗi.

Ví dụ

#include <iostream>
using namespace std;
class BaseClass{
   public:
      virtual void display() {
         cout << "Displaying from Base Class\n";
      }
};
class DerivedClass : public BaseClass{
   public:
      void display(int x) override{
         cout << "Displaying from Derived Class\n";
      }
};
main() {
   BaseClass *b_ptr;
   b_ptr = new DerivedClass();
   b_ptr->display();
}

Đầu ra

[Error] 'void DerivedClass::display(int)' marked override, but does not override

Trong trường hợp này, chương trình đang hoạt động tốt vì các chữ ký đều giống nhau. Trong ví dụ sau, chữ ký sẽ khác. Đối với từ khóa ghi đè, nó sẽ tạo ra lỗi.