C++Primer Plus第12章类和动态内存分配程序清单12.1~12.3一个失败的例子重写002

_CRT_SECURE_NO_WARNINGS
用于对取消不安全的strcpy函数的错误报警

_CRT_SECURE_NO_WARNINGS
//string1.cpp -- string class methods
#define _CRT_SECURE_NO_WARNINGS
#include<cstring>
#include"string1.h"
using std::cin;
using std::cout;
using std::strcpy;
using std::strcmp;
//initializing static class member
int String::num_strings = 0;

//static method
int String::HowMany()
{
	return num_strings;
}

//class methods
String::String(const char* s)
{
	len = std::strlen(s);
	str = new char[len +1];
	strcpy(str ,s);
	num_strings++;
}
String::String()
{
	len = 4;
	str = new char[1];
	str[0] = '\0';
	num_strings++;
}

String::String(const String& st)
{
	num_strings++;
	len = st.len;
	str = new char[len+1];
	strcpy(str,  st.str);
}

String::~String()
{
	--num_strings;
	delete[]str;
}

//overloaded operator methods
//assign a String to a String
String& String::operator=(const String& st)
{
	if (this == &st)
	{
		return *this;
	}
	delete[]str;
	len = st.len;
	str = new char[len+1];
	strcpy (str, st.str);
	return *this;
}

//assign a c string to a String 
String& String::operator=(const char* s)
{
	delete[]str;
	len = std::strlen(s);
	str = new char[len+1];
	strcpy (str, s);
	return *this;
}

//read-write char access for non-const String
char& String::operator[](int i)
{
	return str[i];
}

//read-only char access for coust String
const char& String::operator[](int i)const
{
	return str[i];
}



//overloaded operator friends
bool operator<(const String& st1, const String& st2)
{
	return (strcmp(st1.str,   st2.str));
}

bool operator>(const String& st1, const String& st2)
{
	return (st2 < st1);
 }
bool operator==(const String& st1, const String& st2)
{
	return (std::strcmp(st1.str, st2.str) == 0);
 }

//simple String output
 ostream& operator<<(ostream& os, const String& st)
 {
	 os << st.str;
	 return os;
 }

 //quit and dirty String input	
 istream& operator>>(istream& is,  String& st)
 {
	 char temp[String::CINLIM];
	 is.get(temp, String::CINLIM);
	 if (is)
	 {
		 st = temp;
	 }
	 while (is && is.get() !='\n')
	 {
		 continue;
	 }
	 return is;
 }

重载>>运算符提供了一种将键盘输入行读入到 String 对象中的简单方法。它假定输入的字符数不多于String:CINLIM 的字符数,并丢弃多余的字符。在if条件下,如果由于某种原因(如到达文件尾或 get(char*.int)读取的是一个空行)导致输入失败,istream对象的值将置为false。程序清单 12.6通过一个小程序来使用这个类,该程序允许输入几个字符串。程序首先提示用户输入,然后将用户输入的字符串存储到 Sting 对象中,并显示它们,最后指出哪个字符串最短、哪个字符串按字

母顺序排在最前面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值