类的操作符重载分别在头文件和源文件中怎么写?
时间: 2024-03-25 16:39:32 浏览: 119
C++源文件<<运算符重载的源代码
在 C++ 中,类的操作符重载通常也分为头文件和源文件两部分。
在头文件中,我们通常只需要声明该操作符的原型,而在源文件中则需要实现该操作符的具体功能。
以重载运算符 `+` 为例,操作符重载的头文件和源文件的写法如下:
在头文件中,声明该操作符的原型:
```c++
// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
public:
MyClass operator+ (const MyClass& other) const;
private:
int value;
};
#endif
```
在源文件中,实现该操作符的具体功能:
```c++
// MyClass.cpp
#include "MyClass.h"
MyClass MyClass::operator+ (const MyClass& other) const {
MyClass result;
result.value = this->value + other.value;
return result;
}
```
需要注意的是,如果该操作符重载函数是类的成员函数,我们需要在函数名前面加上 `operator` 关键字,并在函数实现时使用 `::` 运算符指定该函数属于哪个类。
而如果该操作符重载函数是类的非成员函数,则需要在函数名前面加上 `friend` 关键字,并在函数实现时不需要指定该函数属于哪个类。
例如,重载运算符 `<<` 时,我们通常会将其定义为一个非成员函数,并声明为该类的友元函数,如下所示:
```c++
// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H
#include <iostream>
class MyClass {
public:
friend std::ostream& operator<< (std::ostream& os, const MyClass& obj);
private:
int value;
};
#endif
```
```c++
// MyClass.cpp
#include "MyClass.h"
std::ostream& operator<< (std::ostream& os, const MyClass& obj) {
os << obj.value;
return os;
}
```
阅读全文