string模拟实现流插入(输出)+流提取(输入)

个人主页:Jason_from_China-CSDN博客

所属栏目:C++系统性学习_Jason_from_China的博客-CSDN博客

所属栏目:C++知识点的补充_Jason_from_China的博客-CSDN博客

 string模拟实现clear

模拟实现clear的目的是在流提取的时候我们清空之前的数据,然后重新输入使用的,不然就会导致

	//clear的实现,和流提取综合使用实现
	void string::clear()
	{
		_str[0] = '\0';
		_size = 0;
	}

代码解释:

  1. 直接在下标为0的位置插入字符\0
  2. 更新_size

 string模拟实现流插入(输出)

流插入和流提取我们直接重载为友元函数,在日期类的流插入和流提取里面什么表述的比较清楚,不明白为什么需要重载为友元函数的,可以看一下

日期类的实现(C++)_c++如何用whatday-CSDN博客

这里我们实现的目的就是可以直接打印出类

C++文档里面的参数

	//重载为友元函数
	//流插入(输出)
	ostream& operator<<(ostream& os, const string& str)
	{
		cout << "_str:" << str.c_str() << "/_size:" << str._size << "/_capacity:" << str._capacity << endl;

		//cout << "当前字符串:" << str.c_str() << endl;
		return os;
	}

注意事项:

  1. 这里是参数的接收

ostream&是引用:

  1. 避免不必要的复制:当函数的参数是对象时,如果不使用引用,在函数调用时会创建对象的副本。对于像ostream这样的复杂流对象,复制它们的代价是很高的。ostream类可能包含大量的内部状态信息,如缓冲区、格式标志等,复制这些信息会消耗大量的时间和内存。通过使用引用,函数直接操作原始的ostream对象,避免了这种不必要的复制开销。
  2. 保持对象的一致性:如果ostream对象被复制,那么在函数中对副本所做的任何操作(如设置格式标志、写入数据到缓冲区等)都不会影响到原始的ostream对象。而使用引用可以确保函数对ostream对象的操作反映在调用该函数的原始环境中。例如,在operator<<函数中对输出格式的修改(如设置精度、宽度等)会在后续使用该ostream对象的代码中生效。

ostream& os,不使用const引用:

 
  • 需要修改流状态ostream对象在输出过程中可能会改变其内部状态,比如更新缓冲区指针、设置错误标志等。如果将参数声明为const引用,就意味着在函数内部不能对ostream对象进行任何修改,但实际上在输出操作中是需要修改这些状态信息的。例如,当向流中写入数据时,如果缓冲区已满,ostream对象可能会自动刷新缓冲区,这涉及到对ostream内部状态的修改,与const的语义相冲突。因此,不能将ostream&参数声明为const引用。

string模拟实现流提取(输入)

	//流提取(输入),提取不能使用cin和scanf进行封装,需要get或者getline
	istream& operator>>(istream& is, string& str)
	{
		str.clear();
		cout << "请输入字符串创建类:";
		//字符串输入不能使用cin,cin遇见空格和换行会导致直接停止读取,所以我们采取get()
		char ch;
		ch = is.get();//读取
		while (ch != '\n')
		{
			str += ch;//追加字符
			ch = is.get();//继续读取
		}
		return is;
	}

注意事项:

  1. 我们读取不能使用cin,因为cin读取的时候会遇见空格和换行都会停止读取,我们是需要读取空格的,所以是不能使用cin,所以我们需要到iostream库里面找找看看什么合适
  2. 我们需要创建一个字符,然后循环读取,这里的判断条件是遇见换行就会跳出循环,我们也可以自己设置判断条件,比如可以设置为遇见///

精讲合集:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值