Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Тестовые примеры / ch2 / overload
.C // source module: overload.c
#include <iostream.h>
#include <string.h>
class sarray
{
int num;
char *data;
public:
sarray( const char* str ) // constructor
{
num = strlen(str)+1;
data = new char[num];
strcpy( data, str );
};
~sarray() { delete data; };
char& operator[] (int idx ) // destructor
{
if (idx>=0 && idx < num)
return data[idx];
else
{
cerr << "Invalid index: " << idx << endl;
return data[0];
};
};
const char* operator=( const char* str )
{
if (strlen(str))
{
delete data;
num = strlen(str)+1;
data = new char[num];
strcpy (data, str );
}
return str;
};
const sarray& operator=( const sarray& obj )
{
if (strlen(obj.data))
{
delete data;
num = strlen(obj.data)+1;
data = new char[num];
strcpy (data, obj.data );
}
return obj;
};
int operator == ( const char* str )
{
return (str && data) ? strcmp(data,str) : -1;
};
int operator < ( const char* str)
{
return (strcmp(data,str) < 0) ? 1 : 0;
};
int operator > ( const char* str )
{
return (strcmp(data,str) > 0) ? 1 : 0;
};
friend ostream& operator << (ostream& os, sarray& obj)
{
return os << (obj.data ? obj.data : "Nil") ;
};
};
int main()
{
sarray A("Hello"), B("world");
cout << "A: " << A << endl; // << operator
A = "Bad"; // = operator
A[0] = 'T'; // [] operator
cout << "A: " << A << endl;
A = B; // = array& operator
cout << "A: " << A[1] << endl;
cout << "A < B: " << (A < "Two") << endl;
return 0;
}
Соседние файлы в папке ch2