30/09/2018, 16:35
Overload the assignment operator =
Khi tìm hiểu về tái định nghĩa của toán tử gán, mình hơi có chút khó hiểu khi định nghĩa nó. Sau đây mình trích dẫn 1 đoạn mong mọi người giúp đỡ :
class StringClass
{ public:
...
void someProcessing( );
...
StringClass& operator=(const StringClass& rightSide);
...
private: char *a; //Dynamic array for characters in the string
int capacity; //size of dynamic array a
int length; //Number of characters in a
};
....
s1 = s2; //s1 and s2 in the class StringClass
/ /Khi hàm được gọi (s1=s2).someProcessing();
....
// Định nghĩa tái định nghĩa toán tử gán sử dụng con trỏ this để return object ở phía trái toán tử = (left-sight)
//This version does not work in all cases .????
-----
StringClass& StringClass::operator = (const StringClass& rightSide)
{
capacity = rightSide.capacity;
length = rightSide.length;
delete [] a;
a = new char[capacity];
for (int i = 0; i < length; i++)
a[i] = rightSide.a[i];
return *this;
}
Điều gì sẽ xảy ra nếu có cùng object ở 2 bên toán tử gán.?
Mọi người có thể giải thích rõ hơn về toán tử này với ak? Thanks!
Bài liên quan
Thế thì bạn nên coi người ta sử dụng deep copy (khác với shallow copy) như thế nào:
9.15 — Shallow vs. deep copying
Shallow copying Because C++ does not know much about your class, the default copy constructor and default assignment operators it provides use a copying method known as a memberwise copy (also know…
Cần đưa ra ví dụ để mọi người có thể hiểu câu hỏi của bạn hơn