<< Chapter < Page Chapter >> Page >

Để đa năng hóa toán tử<<phải có một toán hạng trái của kiểu ostream&(như là cout trong biểu thức cout<<X), vì thế nó phải là hàm không thành viên. Tương tự, đa năng hóa toán tử>>phải có một toán hạng trái của kiểu istream&(như là cin trong biểu thức cin>>X), vì thế vì thế nó cũng phải là hàm không thành viên.

Ngoại trừ đa năng hóa toán tử>>và<<liên quan đến dòng nhập/xuất dữ liệu chúng ta có hình 4.4 về cách đa năng hóa toán tử như sau:

Biểu thức Hàm thành viên Hàm không thành viên
a#b a.operator#(b) operator#(a,b)
#a a.operator() operator#(a)
a=b a.operator=(b)  
a[b] a.operator[](b)  
a(b) a.operator()(b)  
a-> a.operator->()  
a++ a.operator++(0) operator++(a,0)
a-- a.operator--(0) operator--(a,0)

Hình 4.4: Việc cài đặt các hàm toán tử

Đa năng hoá các toán tử hai ngôi

Các toán tử hai ngôi được đa năng hóa trong hình 4.5 sau:

Toán tử Ví dụ Toán tử Ví dụ Toán tử Ví dụ
+ a+b += a+=b <<= a<<=b
- a-b -= a-=b == a==b
* a*b *= a*=b != a!=b
/ a/b /= a/=b <= a<=b
% a%b %= a%=b >= a>=b
^ a^b ^= a^=b && a&&b
& a&b &= a&=b || a||b
| a|b |= a|=b , a,b
= a=b << a<<b [] a[b]
< a<b >> a>>b ->* a->*b
> a>b >>= a>>=b

Hình 4.5: Các toán tử hai ngôi được đa năng hóa

Một toán tử hai ngôi có thể được đa năng hóa như là hàm thành viên không tĩnh với một tham số hoặc như một hàm không thành viên với hai tham số (một trong các tham số này phải là hoặc là một đối tượng lớp hoặc là một tham chiếu đến đối tượng lớp).

Ví dụ 4.2: Chúng ta xây dựng lớp số phức với tên lớp là Complex và đa năng hóa các toán tử tính toán + - += -= và các toán tử so sánh == !=>>=<<= với các hàm toán tử là các hàm thành viên.

1: #include<iostream.h>

2: #include<math.h>

3:

4: class Complex

5: {

6: private:

7: double Real, Imaginary;

8: public:

9: Complex(); // Constructor mặc định

10: Complex(double R,double I);

11: Complex (const Complex&Z); // Constructor sao chép

12: Complex (double R); // Constructor chuyển đổi

13: void Print(); // Hiển thị số phức

14: // Các toán tử tính toán

15: Complex operator + (Complex Z);

16: Complex operator - (Complex Z);

17: Complex operator += (Complex Z);

18: Complex operator -= (Complex Z);

19: // Các toán tử so sánh

20: int operator == (Complex Z);

21: int operator != (Complex Z);

22: int operator>(Complex Z);

23: int operator>= (Complex Z);

24: int operator<(Complex Z);

25: int operator<= (Complex Z);

26: private:

27: double Abs(); // Giá trị tuyệt đối của số phức

28: };

29:

30: Complex::Complex()

31: {

32: Real = 0.0;

33: Imaginary = 0.0;

34: }

35:

36: Complex::Complex(double R,double I)

37: {

38: Real = R;

39: Imaginary = I;

40: }

41:

42: Complex::Complex(const Complex&Z)

43: {

44: Real = Z.Real;

45: Imaginary = Z.Imaginary;

46: }

47:

48: Complex::Complex(double R)

49: {

50: Real = R;

51: Imaginary = 0.0;

52: }

53:

54: void Complex::Print()

55: {

56: cout<<'('<<Real<<','<<Imaginary<<')';

57: }

58:

59: Complex Complex::operator + (Complex Z)

60: {

61: Complex Tmp;

62

63: Tmp.Real = Real + Z.Real;

64: Tmp.Imaginary = Imaginary + Z.Imaginary;

65: return Tmp;

66: }

67:

68: Complex Complex::operator - (Complex Z)

69: {

70: Complex Tmp;

71:

72: Tmp.Real = Real - Z.Real;

73: Tmp.Imaginary = Imaginary - Z.Imaginary;

74: return Tmp;

75: }

76:

77: Complex Complex::operator += (Complex Z)

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Lập trình hướng đối tượng. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10794/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?

Ask