长安的花

当学问走过漫漫古道
凿刻入千窟,心也从愚昧中苏醒

0%

Hack cpp STL Overload

重载运算符

如果一个想要输出一个类的对象,直接使用cout<<p<<endl;是不行的,因为<<不支持这个类型,所以,这时候就要对运算符进行重载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>

using namespace std;

class Person {
public:
Person(const string& first_name, const string& last_name) : first_name_(first_name), last_name_(last_name) {}
const string& get_first_name() const {
return first_name_;
}
const string& get_last_name() const {
return last_name_;
}
private:
string first_name_;
string last_name_;
};
// Enter your code here.
ostream& operator<<(ostream& os,Person& p) {//这里 ostream& 表示要返回的是一个输出流
//在括号里第一个定义的也是 ostream& os; 最后返回的也是 os;
//这是定义在类外面
os<<"first_name="<<p.get_first_name()<<","<<"last_name="<<p.get_last_name();
return os;
}



int main() {
string first_name, last_name, event;
cin >> first_name >> last_name >> event;
auto p = Person(first_name, last_name);
cout << p << " " << event << endl; //这里就正常使用运算符"<<"
return 0;
}

将运算符在类里面定义

1
2
3
4
5
6
bool operator < (const Message& M2) {
if(current_id < M2.current_id)
return true;
else
return false;
}

这段函数的作用的比较 Message 类的大小,根据 Message类的id的大小进行比较,这样定义之后,就可以
使用sort进行一个排序:

vector<Message> messages_;这里messages_是一个向量,里面存放的是Message类

sort(messages_.begin(), messages_.end());

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Matrix{
public:
Matrix(){};
vector<vector<int>> a;
Matrix operator+(Matrix y){//重载运算符 使得可以类的对象与类的对象相加
Matrix result;
int width,height;
width = a[0].size();
height = a.size();
for(int i=0;i<height;++i){
vector<int> b;
int num;
for(int j = 0;j<width;++j){
num = a[i][j]+y.a[i][j];
b.push_back(num);
}
result.a.push_back(b);
}
return result;
}

};
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道