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!

... viết 18:45 ngày 30/09/2018

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:

Learn C++ – 9 Nov 07

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…

Tran Huan viết 18:42 ngày 30/09/2018

Điều gì sẽ xảy ra nếu có cùng object ở 2 bên toán tử gán.?

Cần đưa ra ví dụ để mọi người có thể hiểu câu hỏi của bạn hơn

Bài liên quan
0