<< Chapter < Page | Chapter >> Page > |
78: {
79: Real += Z.Real;
80: Imaginary += Z.Imaginary;
81: return *this;
82: }
83:
84: Complex Complex::operator -= (Complex Z)
85: {
86: Real -= Z.Real;
87: Imaginary -= Z.Imaginary;
88: return *this;
89: }
90:
91: int Complex::operator == (Complex Z)
92: {
93: return (Real == Z.Real)&&(Imaginary == Z.Imaginary);
94: }
95:
96: int Complex::operator != (Complex Z)
97: {
98: return (Real != Z.Real) || (Imaginary != Z.Imaginary);
99: }
100:
101: int Complex::operator>(Complex Z)
102: {
103: return Abs()>Z.Abs();
104: }
105:
106: int Complex::operator>= (Complex Z)
107: {
108: return Abs()>= Z.Abs();
109: }
110:
111: int Complex::operator<(Complex Z)
112: {
113: return Abs()<Z.Abs();
114: }
115:
116: int Complex::operator<= (Complex Z)
117: {
118: return Abs()<= Z.Abs();
119: }
120:
121: double Complex::Abs()
122: {
123: return sqrt(Real*Real+Imaginary*Imaginary);
124: }
125:
126: int main()
127: {
128: Complex X, Y(4.3,8.2), Z(3.3,1.1), T;
129
130: cout<<"X: ";
131: X.Print();
132: cout<<endl<<"Y: ";
133: Y.Print();
134: cout<<endl<<"Z: ";
135: Z.Print();
136: cout<<endl<<"T: ";
137: T.Print();
138: T=5.3;// Gọi constructor chuyển kiểu
139: cout<<endl<<endl<<"T = 5.3"<<endl;
140: cout<<"T: ";
141: T.Print();
142: X = Y + Z;
143: cout<<endl<<endl<<"X = Y + Z: ";
144: X.Print();
145: cout<<" = ";
146: Y.Print();
147: cout<<" + ";
148: Z.Print();
149: X = Y - Z;
150: cout<<endl<<"X = Y - Z: ";
151: X.Print();
152: cout<<" = ";
153: Y.Print();
154: cout<<" - ";
155: Z.Print();
156: cout<<endl<<endl<<"Y += T i.e ";
157: Y.Print();
158: cout<<" += ";
159: T.Print();
160: Y += T;
161: cout<<endl<<"Y: ";
162: Y.Print();
163: cout<<endl<<"Z -= T i.e ";
164: Z.Print();
165: cout<<" -= ";
166: T.Print();
167: Z -= T;
168: cout<<endl<<"Z: ";
169: Z.Print();
170: Complex U(X);// Gọi constructor sao chép
171: cout<<endl<<endl<<"U: ";
172: U.Print();
173: cout<<endl<<endl<<"Evaluating: X==U"<<endl;
174: if (X==U)
175: cout<<"They are equal"<<endl;
176: cout<<"Evaluating: Y!=Z"<<endl;
177: if (Y!=Z)
178: cout<<"They are not equal =>";
179: if (Y>Z)
180: cout<<"Y>Z";
181: else
182: cout<<"Y<Z";
183: return 0;
184: }
Chúng ta chạy ví dụ 4.2 , kết quả ở hình 4.6.
Dòng thứ 10 của chương trình ở ví dụ 4.2: Complex(const Complex&Z);
là một constructor sao chép (copy constructor). Nó khởi động một đối tượng lớp bằng cách tạo một sao chép của một đối tượng lớp đó. Constructor sao chép thực hiện công việc giống như toán tử sao chép nhưng nó có một vai trò đặc biệt. Constructor sao chép chỉ nhận tham số là một tham chiếu chỉ đến đối tượng thuộc chính lớp mà nó được định nghĩa. Các constructor sao chép được dùng mỗi khi một sự sao chép của một đối tượng cần thiết như khi có sự truyền tham số bằng trị, khi trả về một đối tượng từ hàm, hoặc khi khởi động một đối tượng mà được sao chép từ đối tượng khác của cùng lớp. Chẳng hạn:
Complex A(3.5, 4.5);
Complex B(A); // Gọi constructor sao chép
Complex C = B; // Gọi constructor sao chép
…………………
Complex MyFunc(Complex Z) // Gọi constructor sao chép
{ rZ; // Gọi constructor sao chép }
Hình 4.6: Kết quả của ví dụ 4.2
Chúng ta chú ý rằng, dấu = trong câu lệnh trên ứng với constructor sao chép chứ không phải là toán tử gán . Nếu chúng ta không định nghĩa constructor sao chép, trình biên dịch tạo ra một constructor sao chép mặc định sẽ sao chép từng thành viên một.
Notification Switch
Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?