<< Chapter < Page Chapter >> Page >

Ví dụ 4.6:   Lấy lại ví dụ 4.5 nhưng đa năng hóa toán tử () để truy cập đến một phần tử của vector.

1: #include<iostream.h>

2:

3: class Vector

4: {

5: private:

6: int Size;

7: int *Data;

8: public:

9: Vector(int S=2,int V=0);

10: ~Vector();

11: void Print() const;

12: int&operator () (int I);

13: };

14:

15: Vector::Vector(int S,int V)

16: {

17: Size = S;

18: Data=new int[Size];

19: for(int I=0;I<Size;++I)

20: Data[I]=V;

21: }

22:

23: Vector::~Vector()

24: {

25: delete []Data;

26: }

27: void Vector::Print() const

28: {

29: cout<<"Vector:(";

30: for(int I=0;I<Size-1;++I)

31: cout<<Data[I]<<",";

32: cout<<Data[Size-1]<<")"<<endl;

33: }

34:

35: int&Vector::operator ()(int I)

36: {

37: return Data[I];

38: }

39:

40: int main()

41: {

42: Vector V(5,1);

43: V.Print();

44: for(int I=0;I<5;++I)

45: V(I)*=(I+1);

46: V.Print();

47: V(0)=10;

48: V.Print();

49: return 0;

50: }

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

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

Ví dụ 4.7: Đa năng hóa toán tử () để truy cập đến phần tử của ma trận.

1: #include<iostream.h>

2:

3: class Matrix

4: {

5: private:

6: int Rows,Cols;

7: int **Data;

8: public:

9: Matrix(int R=2,int C=2,int V=0);

10: ~Matrix();

11: void Print() const;

12: int&operator () (int R,int C);

13: };

14:

15: Matrix::Matrix(int R,int C,int V)

16: {

17: int I,J;

18: Rows=R;

19: Cols=C;

20: Data = new int *[Rows];

21: int *Temp=new int[Rows*Cols];

22: for(I=0;I<Rows;++I)

23: {

24: Data[I]=Temp;

25: Temp+=Cols;

26: }

27: for(I=0;I<Rows;++I)

28: for(J=0;J<Cols;++J)

29: Data[I][J]=V;

30: }

31:

32: Matrix::~Matrix()

33: {

34: delete [] Data[0];

35: delete [] Data;

36: }

37:

38: void Matrix::Print() const

39: {

40: int I,J;

41: for(I=0;I<Rows;++I)

42: {

43: for(J=0;J<Cols;++J)

44: {

45: cout.width(5); // Hiển thị canh lề phải với chiều dài 5 ký tự

46: cout<<Data[I][J];

47: }

48: cout<<endl;

49: }

50: }

51:

52: int&Matrix::operator () (int R,int C)

53: {

54: return Data[R][C];

55: }

56:

57: int main()

58: {

59: int I,J;

60: Matrix M(2,3,1);

61: cout<<"Matrix:"<<endl;

62: M.Print();

63: for(I=0;I<2;++I)

64: for(J=0;J<3;++J)

65: M(I,J)*=(I+J+1);

66: cout<<"Matrix:"<<endl;

67: M.Print();

68: return 0;

69: }

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

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

Toán tử chuyển đổi kiểu

Phần lớn các chương trình xử lý thông tin sự đa dạng của các kiểu. Đôi khi tất cả các thao tác "dừng lại bên trong một kiểu". Chẳng hạn, một số nguyên với một số nguyên tạo thành một số nguyên (miễn là kết quả không quá lớn để được biểu diễn như một số nguyên). Nhưng thật cần thiết để chuyển đổi dữ liệu của một kiểu tới dữ liệu của kiểu khác. Điều này có thể xảy ra trong các phép gán, các kết quả tính toán, trong việc chuyển các giá trị tới hàm, và trong việc trả về trị từ hàm. Trình biên dịch biết làm thế nào để thực hiện các chuyển đổi nào đó trong số các kiểu có sẵn. Các lập trình viên có thể ép buộc các chuyển đổi trong số các kiểu có sẵn bởi ép kiểu.

Nhưng đối với các kiểu do người dùng định nghĩa thì trình biên dịch không thể tự động biết làm thế nào chuyển đổi trong số các kiểu dữ liệu do người dùng định nghĩa và các kiểu có sẵn. Lập trình viên phải chỉ rõ làm sao các chuyển đổi như vậy sẽ xuất hiện. Các chuyển đổi như thế có thể được thực hiện với constructor chuyển đổi.

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