Làm việc với nạp chồng toán tử trong lập trình C++ qua những ví dụ minh họa

Trong bài viết này Stanford sẽ giúp các bạn học lập trình C++ hiểu rõ hơn về nạp chồng toán tử (operator overloading) qua những ví dụ minh họa sử dụng nạp chồng toán tử trong lập trình C++.

Nạp chồng toán tử (operator overloading) là một tính năng mạnh mẽ trong C++ cho phép bạn định nghĩa lại cách các toán tử hoạt động với các đối tượng của lớp do bạn tạo ra. Điều này giúp mã nguồn trở nên trực quan và dễ đọc hơn.


Các loại toán tử có thể nạp chồng
Hầu hết các toán tử trong C++ đều có thể nạp chồng, bao gồm:

  • Toán tử số học: +, -, *, /, %
  • Toán tử so sánh: ==, !=, <, >, <=, >=
  • Toán tử logic: &&, ||, !
  • Toán tử gán: =, +=, -=, *=, /=
  • Toán tử truy cập: [], ->, *, &
  • Toán tử nhập/xuất: <<, >>

Ví dụ: Sử dụng toán tử + để nạp chồng như sau


Lợi ích của nạp chồng toán tử

  • Tăng tính trực quan: Giúp mã nguồn dễ đọc và dễ hiểu hơn.
  • Tăng tính linh hoạt: Cho phép tùy chỉnh hành vi của các toán tử theo nhu cầu cụ thể.
  • Tăng tính nhất quán: Duy trì tính nhất quán trong cách các toán tử hoạt động với các đối tượng của lớp.
  • Tăng tính tái sử dụng: Tạo ra các lớp có thể tái sử dụng trong nhiều ngữ cảnh khác nhau.
  • Tăng tính trừu tượng: Ẩn đi các chi tiết triển khai phức tạp và chỉ hiển thị các giao diện đơn giản, dễ sử dụng.

Dưới đây là một số ví dụ thực tế để bạn hiểu rõ hơn về nạp chồng toán tử trong C++:

Ví dụ 1: Nạp chồng toán tử + để cộng hai đối tượng của lớp Vector

#include <iostream>
using namespace std;
 
class Vector {
public:
    int x, y;
    Vector(int x = 0, int y = 0) : x(x), y(y) {}
 
    // Nạp chồng toán tử +
    Vector operator + (const Vector& v) {
        return Vector(x + v.x, y + v.y);
    }
};
 
int main() {
    Vector v1(1, 2), v2(3, 4);
    Vector v3 = v1 + v2;
    cout << "v3: (" << v3.x << ", " << v3.y << ")" << endl;
    return 0;
}
Trong ví dụ này, toán tử + được nạp chồng để cộng hai đối tượng Vector với nhau.

Ví dụ 2: Nạp chồng toán tử << để xuất đối tượng của lớp Complex

#include <iostream>
using namespace std;
 
class Complex {
public:
    double real, imag;
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}
 
    // Nạp chồng toán tử <<
    friend ostream& operator << (ostream& out, const Complex& c) {
        out << c.real << " + " << c.imag << "i";
        return out;
    }
};
 
int main() {
    Complex c1(3.5, 2.5);
    cout << "Complex number: " << c1 << endl;
    return 0;
}
Toán tử << được nạp chồng để xuất đối tượng Complex ra màn hình.

Ví dụ 3: Nạp chồng toán tử == để so sánh hai đối tượng của lớp Point

#include <iostream>
using namespace std;
 
class Point {
public:
    int x, y;
    Point(int x = 0, int y = 0) : x(x), y(y) {}
 
    // Nạp chồng toán tử ==
    bool operator == (const Point& p) {
        return (x == p.x && y == p.y);
    }
};
 
int main() {
    Point p1(1, 2), p2(1, 2), p3(3, 4);
    cout << "p1 == p2: " << (p1 == p2) << endl;
    cout << "p1 == p3: " << (p1 == p3) << endl;
    return 0;
}
Toán tử == được nạp chồng để so sánh hai đối tượng Point.

Hy vọng những ví dụ này giúp các bạn đang học lập trình C++ hiểu rõ hơn về nạp chồng toán tử trong C++. Nếu bạn chưa rõ Nạp chồng toán tử là gì và các ưu điểm của nó trong lập trình C++ tham khảo ngay bài viết này: Nạp chồng toán tử trong C++ là gì ở đây.

Bạn có thể bắt đầu ngay con đường chinh phục của bạn để trở thành lập trình viên chuyên nghiệp trong tương lai bằng việc đăng ký tham gia khoá học lập trình c++ cho người mới tại đây: http://bit.ly/2SLPYFF. Hoặc gọi ngay cho Stanford theo hotline: 0963.723.236 - 0866.586.366 để được gọi lại tư vấn trực tiếp nhé.

==========🎬 🎬 🎬==========
☎️STANFORD – ĐÀO TẠO VÀ PHÁT TRIỂN CÔNG NGHỆ
Hotline: 0963 723 236 - 0866 586 366
Website: https://stanford.com.vn
Facebook: http://bit.ly/2FN0TYb
Youtube: http://bit.ly/2TkKT7I

Tags: nạp chồng toán tử (operator overloading) trong c++, học lập trình c++