Chồng hàm và chồng toán tử C++

Chồng hàm

C++ cho phép định nghĩa nhiều hàm có cùng tên với điều kiện:

– Khác nhau về số lượng hoặc kiểu dữ liệu của tham số khi định nghĩa hàm.
– Chú ý: Không thể chồng hàm (overload) chỉ với điều kiện khác nhau về kiểu dữ liệu trả về.

Ví dụ 1: viết 2 hàm tìm giá trị lớn nhất của 2 số nguyên int, 2 số float.

#include <iostream> 

using namespace std;

int max(int x1, int x2);
float max(float x1, float x2);


// Main function for the program
void main( )
{
    int a = 2, b = -9;
    float c = 7.8, d = 3.5;
    cout << "max(" << a << "," << b << ") = " << max(a, b) << "\n";
    cout << "max(" << c << "," << d << ") = " << max(c, d) << "\n"; system("pause"); } int max(int x1, int x2) { return ((x1 > x2)? x1 : x2);
}

float max(float x1, float x2)
{
    return ((x1 > x2)? x1 : x2);
}

Kết quả:

Chồng hàm tìm giá trị lớn nhất của 2 số
Chồng hàm tìm giá trị lớn nhất của 2 số

 

Chồng toán tử

Trong ngôn ngữ C, các toán tử +, -, *, /, %,…được sử dụng để tính toán với các kiểu dữ liệu nguyên thủy (int, float, long,..). Ngôn ngữ C++ cho phép định nghĩa toán tử +, -, *, /, % áp dụng cho các kiểu dữ liệu do người lập trình viên tự định nghĩa (mảng, ma trận, đối tượng,..) được gọi là chồng toán tử.

Các toán tử được phép và không được phép overload

Các toán tử được phép overload
Các toán tử được phép overload

 

Toán tử không được phép overload
Toán tử không được phép overload

Định nghĩa chồng toán tử

– Khai báo tên hàm toán tử: từ khóa operator và tên phép toán.
Ví dụ 2: operator+ (định nghĩa chồng phép +), operator- (định nghĩa chồng phép -)

– Các đối số của hàm toán tử
a. Với phép toán có 2 toán hạng, thì hàm toán tử cần có 2 đối số. Đối số thứ nhất tương ứng với toán hạng thứ nhất, đối số thứ hai tương ứng với toán hạng thứ hai. Do vậy, đối với phép toán không giao hoán (như phép -) thì thứ tự đối số là rất quan trọng

Ví dụ 3: Viết hàm toán tử cộng, trừ, nhân, chia phân số

struct PS
{
    int a;
    int b;
}PS_TAG;

PS operator+(PS p1, PS p2); // p1 + p2
PS operator-(PS p1, PS p2); // p1 - p2
PS operator*(PS p1, PS p2); // p1 * p2
PS operator/(PS p1, PS p2); // p1 / p2

b. Với phép toán 1 toán hạng, thì hàm toán tử cần 1 đối số. Ví dụ: hàm toán tử đổi dấu phân số.
Ví dụ 4:

struct PS
{
    int a;
    int b;
}PS_TAG;

PS operator-(PS p);

– thân hàm toán tử: viết như thân hàm thông thường
Ví dụ 5: Viết hàm toán tử cộng 2 phân số

struct PS
{
    int a;
    int b;
}PS_TAG;

PS operator+(PS p1, PS p2)
{
    PS p;
    p.a = p1.a * p2.b + p2.a * p1.b;
    p.b = p1.b * p2.b;
    return p;
}

– Cách gọi hàm chồng toán tử
Cách 1:dùng như hàm thông thường

PS p, q, p1, p2;
p = operator+(p1, p2);
q = operator-(p1, p2);

Cách 2: dùng như toán tử trong C/C++

PS p, q, p1, p2;
p = p1 + p2;
q = p1 - p2;

Be the first to comment

Leave a Reply