Search…

C++11 - OOP - override

15/09/20202 min read
Tìm hiểu về ý nghĩa và cách sử dụng từ khoá override trong C++11.

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.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024