[C/C++] Từ khóa explicit trong C++

Trong C++ cho phép ta sử dụng tham số duy nhất của constructor, để chuyển đổi ngầm định giữa kiểu dữ liệu của tham số đó sang kiểu dữ liệu của class để truyền vào cho hàm.

Ví dụ :


#include <iostream>

#include <string>

using namespace std;

class Person

{

private:

   string name;

public:

   Person(string name)

   {

      this->name = name;

   }

   //Hàm hằng thành viên
   string GetName() const

   {

      return name;

   }

};

void PersonInfo(Person person)

{

   cout << "Hello " << person.GetName() << endl;

}

int main()

{

   string name = "Noname";

   PersonInfo(name);

   return 0;

}

Kết quả :

Hello Noname

Ở ví dụ trên hàm PersonInfo có 1 tham số kiểu Person. Khi đó gọi hàm PersonInfo chúng ta truyền cho nó 1 đối tượng Person:

//Tạo đối tượng Person
Person person("Noname");
//Truyền đối tượng person vào hàm PersonInfo
PersonInfo(person);

Tuy nhiên constructor của class Person có 1 parameter kiểu string. Nên khi gọi hàm PersonInfo ta có thể truyền vào 1 biến kiểu string. Khi đó trình biên dịch sẽ ép kiểu ngầm định từ string sang Person để phù hợp với parameter của hàm PersonInfo.

Để tránh ép kiểu ngầm định như trên chúng ta sử dụng từ khóa explicit cho constructor của Person

explicit Person(string name)
{
   this->name = name;
}

Khi constructor được khai báo là explicit ta PHẢI truyển đối số cho hàm PersonInfo là đối tượng Person 1 cách tường minh.

Tagged:

Leave A Comment?