<< 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
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.
Notification Switch
Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?