×

Định nghĩa toán tử tùy chỉnh với từ khóa operator trong C++

Trong lập trình C++, toán tử là các ký hiệu được sử dụng để thực hiện các phép tính trên các toán hạng. Các toán tử có thể là toán tử số học như cộng (+), trừ (-), nhân (*), chia (/), và nhiều toán tử khác. Một trong những tính năng mạnh mẽ của C++ là khả năng định nghĩa toán tử tùy chỉnh thông qua từ khóa operator. Việc này giúp các lập trình viên có thể tùy biến cách mà các toán tử làm việc với các đối tượng của các lớp do người dùng định nghĩa.

Tại sao cần định nghĩa toán tử tùy chỉnh?

Khi làm việc với các đối tượng phức tạp hơn như các lớp tự định nghĩa, các toán tử mặc định có thể không đáp ứng đủ nhu cầu. Ví dụ, nếu bạn có một lớp Complex để biểu diễn số phức, bạn sẽ muốn sử dụng toán tử cộng để cộng hai số phức với nhau thay vì phải viết hàm cộng riêng. Định nghĩa toán tử tùy chỉnh giúp cho mã nguồn dễ đọc hơn và tiện lợi hơn.

Cách định nghĩa toán tử tùy chỉnh

Cú pháp

Để định nghĩa một toán tử tùy chỉnh, bạn sử dụng từ khóa operator theo sau là toán tử muốn định nghĩa và sau đó là phần thân hàm. Dưới đây là cú pháp chung:

return_type operator OP (parameter_list) {
    // implementation
}

Trong đó:

  • return_type là kiểu dữ liệu trả về của toán tử.
  • OP là toán tử cần định nghĩa (ví dụ: +, -, *, /).
  • parameter_list là danh sách tham số cho hàm.

Ví dụ cụ thể

Giả sử bạn có một lớp Complex đại diện cho số phức, bạn muốn định nghĩa toán tử cộng (+) để cộng hai đối tượng của lớp này:

class Complex {
private:
    double real;
    double imag;

public:
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}

    // Định nghĩa toán tử cộng
    Complex operator + (const Complex& other) {
        return Complex(real + other.real, imag + other.imag);
    }

    void display() const {
        std::cout << real << " + " << imag << "i" << std::endl;
    }
};

Với định nghĩa trên, bạn có thể sử dụng toán tử cộng để cộng hai số phức:

int main() {
    Complex c1(3.0, 4.0);
    Complex c2(1.0, 2.0);
    Complex c3 = c1 + c2;

    c3.display(); // Output: 4 + 6i
    return 0;
}

Định nghĩa toán tử khác

Ngoài toán tử số học, bạn cũng có thể định nghĩa các toán tử khác như toán tử so sánh, toán tử gán, toán tử tăng, giảm và nhiều loại toán tử khác.

Toán tử so sánh

Ví dụ về định nghĩa toán tử so sánh == cho lớp Complex:

bool operator == (const Complex& other) const {
    return (real == other.real && imag == other.imag);
}

Toán tử gán

Định nghĩa toán tử gán (=) có thể giống như sau:

Complex& operator = (const Complex& other) {
    if (this != &other) {
        real = other.real;
        imag = other.imag;
    }
    return *this;
}

Như vậy, với khả năng định nghĩa toán tử tùy chỉnh, C++ trở nên linh hoạt hơn khi làm việc với các lớp và đối tượng phức tạp. Việc định nghĩa các toán tử này không chỉ giúp mã nguồn trở nên dễ hiểu và thuận tiện hơn mà còn giảm thiểu sai sót khi thao tác với các đối tượng.

Comments