如果我们要用iostream中的cout输出类中的内容,有一种方法是直接一个个cout;
比如我们现在有一个String类:
class String {
public:
char* string;
String(const char* str) {
string = new char [strlen(str) + 1];
memcpy(string, str, strlen(str) + 1);
string[strlen(str) + 1] = 0;
}
};
我们要将其中的内容输出,可以直接:
std::cout<<a.string;
但是如果参数成员是private的话我们就不能用这种方法了;
当然,我们可以在类在写一个用与输出的函数,也可以在函数外写一个常规函数,然后将其定义为String类的友元;
但是这种方法遇到参数成员多的情况下,就用着很难受了,因为要一个个cout;
那我们有没有更好的方法呢?
当然有,那就是重载类的<<重载符;
我们可以写一个重载<<的函数,然后将其定义为String类的友元,当然,我们也可以在String类中直接写重载函数;
就像这样:
#include<iostream>
#include<string.h>
#include<ostream>
class String {
char* string;
int size;
public:
String(const char* str) {
size = strlen(str);
string = new char [size + 1];
memcpy(string, str, size + 1);
string[size + 1] = 0;
}
friend std::ostream& operator <<(std::ostream& a, String& b);
};
std::ostream& operator <<(std::ostream& a, String& b) {
a << b.string<<std::endl<<b.size;
return a;
}
int main() {
String a = "本菜是好菜";
std::cout << a;
}
然后我们就可以直接cout了;