STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    C++11 - OOP - override

    Tìm hiểu về ý nghĩa và cách sử dụng từ khoá override trong C++11.
    17/06/2014 15/09/2020 2 phút đọc
    C++11 - OOP - override

    Danh sách bài viết về C++11

    Nhắc lại override

    Override là việc viết lại 1 phương thức (method) trong lớp dẫn xuất (derived class) mà ở lớp cơ sở (base class).

    class CReptile
    {
    public:
    	char* getClassName(int sign)
    	{
    		if (sign > 0)
    		{
    			return "CReptile";
    		}
    	}
    };
    
    class CSnake: public CReptile
    {
    public:
    	char* getClassName(int sign)
    	{
    		if (sign > 0)
    		{
    			return "CSnake";
    		}
    	}
    };

    Ở codes trên, phương thức getClassName() trong class CSnake override phương thức getClassName() trong class CReptile và getClassName() trong class CSnake override phương thức getClassName() trong class CAnimal.

    Rủi ro của codes trên

    class CReptile
    {
    public:
    	char* getClassName(int sign)
    	{
    		if (sign > 0)
    		{
    			return "CReptile";
    		}
    	}
    };
    
    class CSnake: public CReptile
    {
    public:
    	char* getClassName(char sign)
    	{
    		if (sign > 0)
    		{
    			return "CSnake";
    		}
    	}
    };

    Đối số trong phương thức getClassName trong class CReptile mang kiểu int, do sơ suất ta có thể làm cho đối số trong getClassName trong class CSnake mang kiểu char. Và mục đích ban đầu ta override hàm getClassName đã thất bại, đây được xem như 1 hàm mới.

    Từ khóa override trong C++11

    Trong phiên bản C++11 có hỗ trợ thêm 1 từ khóa là override, ý nghĩa của từ khóa này sẽ giúp kiểm soát việc 1 hàm có thật sự là override 1 phương thức của lớp mà nó đang kế thừa hay không, nếu không tồn tại phương thức mà nó đang "nghĩ" rằng nó đang override tại lớp mà nó kế thừa thì trình biên dịch sẽ báo lỗi khi biên dịch. Thêm từ khóa override vào cuối tên phương thức như sau dòng 16.

    class CReptile
    {
    public:
    	char* getClassName(int sign)
    	{
    		if (sign > 0)
    		{
    			return "CReptile";
    		}
    	}
    };
    
    class CSnake: public CReptile
    {
    public:
    	char* getClassName(char sign) override
    	{
    		if (sign > 0)
    		{
    			return "CSnake";
    		}
    	}
    };

    Do phương thức getClassName(char sign) không có tồn tại trên lớp cơ sở, nên khi biên dịch sẽ lỗi. Từ đó, có thể biết rằng đang overload thay vì override.

    0 Bình luận
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021