C++重载=
时间: 2023-07-11 14:06:24 浏览: 61
C++中的赋值运算符(=)可以被重载。重载后的赋值运算符可以让程序员自定义对象之间的赋值操作,从而实现更加灵活的对象赋值。在重载赋值运算符时,需要注意以下几点:
1. 赋值运算符必须是一个成员函数。
2. 重载后的赋值运算符返回一个引用,以便支持连续赋值。
3. 重载后的赋值运算符函数参数为一个常量引用,以避免在赋值操作中执行不必要的复制操作。
4. 在赋值操作中需要判断是否为自赋值,如果是自赋值,则不需要进行任何操作。
下面是一个重载赋值运算符的示例:
```cpp
class MyClass {
public:
MyClass& operator=(const MyClass& other) {
if (this != &other) { // 判断是否为自赋值
// 执行赋值操作
}
return *this; // 返回一个引用,以支持连续赋值
}
};
```
使用重载后的赋值运算符时,可以像使用内置类型一样进行赋值操作:
```cpp
MyClass obj1, obj2;
obj1 = obj2; // 调用重载后的赋值运算符
```
相关问题
c++运算符重载=
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`指向的内存中。
最后,赋值运算符返回当前对象的引用,以支持链式赋值操作。
c++运算符重载==的示例
下面是一个 C++ 运算符重载 `==` 的示例:
```c++
class MyClass {
public:
int value;
// 重载 == 运算符
bool operator==(const MyClass& other) const {
return value == other.value;
}
};
int main() {
MyClass a, b;
a.value = 10;
b.value = 20;
if (a == b) {
std::cout << "a and b are equal" << std::endl;
} else {
std::cout << "a and b are not equal" << std::endl;
}
return 0;
}
```
在上面的示例中,我们定义了一个 `MyClass` 类,其中有一个 `value` 成员变量。我们重载了 `==` 运算符,以便可以使用 `a == b` 的形式来比较两个 `MyClass` 对象是否相等。在 `operator==` 函数中,我们比较了两个对象的 `value` 成员变量是否相等。如果相等,就返回 `true`,否则返回 `false`。在 `main` 函数中,我们创建了两个 `MyClass` 对象 `a` 和 `b`,并将它们的 `value` 成员变量分别设置为 10 和 20。然后我们使用 `a == b` 的形式来比较它们是否相等,如果相等,就输出一条消息,否则输出另一条消息。