⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fun_definition.cpp

📁 一个关于标准string类的C++程序
💻 CPP
字号:
#include <iostream>

//using namespace std;

#include <iomanip>

using std::setw;
using std::cout;
using std::endl;

#include <new>

#include <cstring>
#include <cstdlib>

#include "head.h"

//conversion constutor converts char * to String
String::String( const char *s ):length( strlen( s ) )
{
	cout << "Conversion constructor: " << s << '\n';
	setString( s );

}

//copy constructor
String::String( const String &copy ):length( copy.length )
{
	cout << "Copy construtor: " << copy.sPtr << '\n';
	setString( copy.sPtr );

}

//destructor
String::~String()
{
	cout << "Destructor: " << sPtr << '\n';
	delete [] sPtr;
}

//overloaded = operator; avoids self assignment
const String &String::operator =( const String &right )
{
	cout << "operator= called\n";

	if ( &right != this )
	{
		delete [] sPtr;
		length = right.length;
		setString( right.sPtr );
	}

	else
		cout << "Attempted assignment of a String to etself\n";

	return *this;

}



const String &String::operator+=(const String &right )
{
	size_t newLength = length + right.length;
    char *tempPtr = new char[ newLength + 1 ];

	strcpy( tempPtr, sPtr );
    strcpy( tempPtr + length, right.sPtr );

	delete [] sPtr;
	sPtr = tempPtr;
	length = newLength;

	return *this;

}

bool String::operator!() const
{
	return length == 0;

}


bool String::operator ==( const String &right ) const
{
	return strcmp(sPtr, right.sPtr ) == 0;

}


bool String::operator<( const String &right ) const
{
	return strcmp( sPtr, right.sPtr ) < 0;

}


char &String::operator[]( int subscript )
{
	if (subscript < 0 || subscript >= length )
	{
		cout << "Error: Subscript " << subscript
			<< "out of range" << endl;

		exit(1);
	}

	return sPtr[ subscript ];

}


const char &String::operator[]( int subscript ) const
{
	if ( subscript < 0 || subscript >= length )
	{
		cout << "Error: Subscript " << subscript
			<< "out of range" << endl;

		exit( 1 );
	}

	return sPtr[ subscript ];
}


String String::operator ()( int index, int subLength )
{
	if ( index < 0 || index >= length || subLength < 0 )
		return " ";

	int len;

	if ( (subLength == 0) || (index + subLength > length ) )
		len = length - index;
	else
		len = subLength;


	char *tempPtr = new char[ len + 1 ];

	strncpy( tempPtr, &sPtr[ index ], len );
	tempPtr[ len ] = '\0';

	String tempString( tempPtr );
	delete [] tempPtr;

	return tempString;
}


int String::getLenth() const
{
	return length;
}


void String::setString( const char *string2 )
{
	sPtr = new char[ length + 1 ];
	strcpy( sPtr, string2 );
}


ostream &operator<<( ostream &output, const String &s )
{
	output << s.sPtr;

	return output;
}


istream &operator>>( istream &input, String &s )
{
	char temp[ 100 ];
	 
	input >> setw( 100 ) >> temp;
	s = temp;

	return input;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -