<< Chapter < Page Chapter >> Page >

Ví dụ 2.18:

1: #include<iostream.h>

2: // Định nghĩa số phức

3: typedef struct

4: {

5:     double Real;

6:     double Imaginary;

7: }Complex;

8:

9:  Complex SetComplex(double R,double I);

10: void DisplayComplex(Complex C);

11: Complex operator + (Complex C1,Complex C2);

12: Complex operator - (Complex C1,Complex C2);

13:

14: int main(void)

15: {

16:    Complex C1,C2,C3,C4;

17:

18:    C1 = SetComplex(1.0,2.0);

19:    C2 = SetComplex(-3.0,4.0);

20:    cout<<"\nSo phuc thu nhat:";

21:    DisplayComplex(C1);

22:    cout<<"\nSo phuc thu hai:";

23:    DisplayComplex(C2);

24:    C3 = C1 + C2;

25:    C4 = C1 - C2;

26:    cout<<"\nTong hai so phuc nay:";

27:    DisplayComplex(C3);

28:    cout<<"\nHieu hai so phuc nay:";

29:    DisplayComplex(C4);

30:    return 0;

31: }

32:

33: //Đặt giá trị cho một số phức

34: Complex SetComplex(double R,double I)

35: {

36:    Complex Tmp;

37:

38:    Tmp.Real = R;

39:    Tmp.Imaginary = I;

40:    return Tmp;

41: }

42:

43: //Cộng hai số phức

44: Complex operator + (Complex C1,Complex C2)

45: {

46:    Complex Tmp;

47:

48:    Tmp.Real = C1.Real+C2.Real;

49:    Tmp.Imaginary = C1.Imaginary+C2.Imaginary;

50:    return Tmp;

51: }

52:

53: //Trừ hai số phức

54: Complex operator - (Complex C1,Complex C2)

55: {

56:    Complex Tmp;

57:

58:    Tmp.Real = C1.Real-C2.Real;

59:    Tmp.Imaginary = C1.Imaginary-C2.Imaginary;

60:    return Tmp;

61: }

62:

63: //Hiển thị số phức

64: void DisplayComplex(Complex C)

65: {

66:    cout<<"("<<C.Real<<","<<C.Imaginary<<")";

67: }

Chúng ta chạy ví dụ 2.18 , kết quả ở hình 2.21

Hình 2.21: Kết quả của ví dụ 2.18

Như vậy trong C++, các phép toán trên các giá trị kiểu số phức được thực hiện bằng các toán tử toán học chuẩn chứ không phải bằng các tên hàm như trong C. Chẳng hạn chúng ta có lệnh sau:

C4 = AddComplex(C3, SubComplex(C1,C2));

thì ở trong C++, chúng ta có lệnh tương ứng như sau:

C4 = C3 + C1 - C2;

Chúng ta nhận thấy rằng cả hai lệnh đều cho cùng kết quả nhưng lệnh của C++ thì dễ hiểu hơn. C++ làm được điều này bằng cách tạo ra các hàm định nghĩa cách thực hiện của một toán tử cho các kiểu dữ liệu tự định nghĩa. Một hàm định nghĩa một toán tử có cú pháp sau:

data_type operator operator_symbol ( parameters )

{

………………………………

}

Trong đó: data_type: Kiểu trả về.

operator_symbol: Ký hiệu của toán tử.

parameters: Các tham số (nếu có).

Trong chương trình ví dụ 2.18, toán tử + là toán tử gồm hai toán hạng (gọi là toán tử hai ngôi; toán tử một ngôi là toán tử chỉ có một toán hạng) và trình biên dịch biết tham số đầu tiên là ở bên trái toán tử, còn tham số thứ hai thì ở bên phải của toán tử. Trong trường hợp lập trình viên quen thuộc với cách gọi hàm, C++ vẫn cho phép bằng cách viết như sau:

C3 = operator + (C1,C2);

C4 = operator - (C1,C2);

Các toán tử được đa năng hóa sẽ được lựa chọn bởi trình biên dịch cũng theo cách thức tương tự như việc chọn lựa giữa các hàm được đa năng hóa là khi gặp một toán tử làm việc trên các kiểu không phải là kiểu có sẵn, trình biên dịch sẽ tìm một hàm định nghĩa của toán tử nào đó có các tham số đối sánh với các toán hạng để dùng. Chúng ta sẽ tìm hiểu kỹ về việc đa năng hóa các toán tử trong chương 4.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Co nuoi. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10760/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Co nuoi' conversation and receive update notifications?

Ask