Rate this post

Trong C++, có nhiều toán tử nạp chồng (overloaded operators) cho phép bạn thao tác với các đối tượng của lớp của bạn như vậy. Ví dụ, toán tử “+” có thể được nạp chồng để hoạt động với hai đối tượng của lớp của bạn như là số phức.

Các bài viết liên quan:

Để nạp chồng toán tử, bạn cần định nghĩa một hàm có tên là toán tử và có dạng sau:

operator operator_symbol (parameters) {
    // code to perform the operation
}

Ví dụ, để nạp chồng toán tử “+” cho một lớp tên là Complex, bạn có thể định nghĩa như sau:

class Complex {
    // other members
    public:
        Complex operator+ (const Complex &other) {
            Complex result;
            result.real = real + other.real;
            result.imag = imag + other.imag;
            return result;
        }
};

Bạn có thể sử dụng toán tử nạp chồng với các đối tượng của lớp đó như là các toán tử truyền thống, ví dụ:

Complex c1, c2, c3;
c3 = c1 + c2;

Cách sử dung nạp chồng toán tử (overloaded operators) trong c++

Sử dụng toán tử nạp chồng trong C++ tương tự như sử dụng các toán tử truyền thống. Bạn có thể sử dụng nó với các đối tượng của lớp mà bạn đã nạp chồng toán tử đó. Ví dụ, nếu bạn đã nạp chồng toán tử “+” cho lớp Complex như trong ví dụ trước, bạn có thể sử dụng nó như sau:

Complex c1, c2, c3;
c3 = c1 + c2;

Toán tử nạp chồng cũng có thể sử dụng với các biến, ví dụ:

Complex c1, c2;
c1 += c2;

Bạn có thể sử dụng toán tử nạp chồng với các hàm, ví dụ:

cout << c1;

Nếu bạn muốn sử dụng toán tử nạp chồng với các kiểu dữ liệu khác nhau, bạn cần phải định nghĩa toán tử nạp chồng cho từng trường hợp đó.

Lưu ý rằng, một số toán tử như “=”, “()”, “[]”, “->” không thể nạp chồng, và các toán tử tự tạo như “++” và “–” thì phải nạp chồng thành hai phiên bản với tên là “operator++()” và “operator++(int)”.

Một số ví dụ nạp chồng toán tử trong c++

Để nạp chồng toán tử, bạn cần định nghĩa một hàm có tên là toán tử và có dạng sau:

operator operator_symbol (parameters) {
    // code to perform the operation
}

Ví dụ, với lớp Vector, bạn có thể nạp chồng toán tử “+” để cộng hai vector.

class Vector {
    public:
        int x, y;
        Vector operator+ (const Vector &other) {
            Vector result;
            result.x = x + other.x;
            result.y = y + other.y;
            return result;
        }
};

Với lớp Point, bạn có thể nạp chồng toán tử “-” để tính khoảng cách giữa hai điểm.

class Point {
    public:
        double x, y;
        double operator- (const Point &other) {
            double result;
            result = sqrt(pow(x - other.x, 2) + pow(y - other.y, 2));
            return result;
        }
};

Với lớp String, bạn có thể nạp chồng toán tử “==” để so sánh hai chuỗi.

class String {
    public:
        char *str;
        bool operator== (const String &other) {
            return strcmp(str, other.str) == 0;
        }
};

Lưu ý rằng, trong các ví dụ trên, các hàm nạp chồng toán tử được định nghĩa trong class và đánh dấu là public. Ngoài ra, các ví dụ trên chỉ là các ví dụ đơn giản, trong thực tế có thể cần phải xử lý các trường hợp đặc biệt hơn.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now