<< 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.

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