c++运算符重载=
时间: 2023-08-07 21:03:40 浏览: 117
C++中的运算符重载(operator overloading)可以让我们自定义类的行为,使其像内置类型一样进行运算。其中一个常用的重载运算符就是赋值运算符(=)。
赋值运算符的默认行为是将一个对象的值赋给另一个对象。当我们自定义一个类时,如果它包含指针成员,我们需要重载赋值运算符,以确保指针指向正确的地址,并避免内存泄漏。
下面是一个示例代码,演示了如何重载赋值运算符:
```c++
#include <iostream>
using namespace std;
class MyString {
private:
char* str;
public:
MyString(const char* s) {
str = new char[strlen(s)+1];
strcpy(str, s);
}
// copy constructor
MyString(const MyString& s) {
str = new char[strlen(s.str)+1];
strcpy(str, s.str);
}
// destructor
~MyString() {
delete [] str;
}
// assignment operator
MyString& operator=(const MyString& s) {
if (this != &s) {
delete [] str;
str = new char[strlen(s.str)+1];
strcpy(str, s.str);
}
return *this;
}
void print() {
cout << str << endl;
}
};
int main() {
MyString s1("Hello");
MyString s2("World");
s1 = s2;
s1.print(); // output: World
return 0;
}
```
在上面的代码中,我们定义了一个名为`MyString`的类,它包含一个指向字符数组的指针`str`,并实现了构造函数、拷贝构造函数、析构函数和赋值运算符。
赋值运算符的实现中,首先判断是否是自我赋值(即`this`指针和参数`s`指向同一个对象),如果是则返回当前对象的引用;否则,先释放当前对象的`str`指向的内存,然后新分配一块内存,将`s`的`str`指向的字符串复制到当前对象的`str`指向的内存中。
最后,赋值运算符返回当前对象的引用,以支持链式赋值操作。
阅读全文