📄 fun_definition.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 © ):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 + -