C++学习笔记:如何重载类的<<运算符【by myself】

如果我们要用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了;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值