|
Z=X+Y + “ Нет войне!”;// эквивалентно Z =operator + (X,Y);
// Z = operator + (Z,” Нет войне!”);
Z.vivod(); }
stroka& operator+(stroka&A, stroka&B)
{ int N = A.len_str() +B.len_str();
stroka*ptr=new stroka(N); // выделяем память на суммарную строку
srtcpy(ptr->string(), A.string());// копируем в новую строку первуюстроку
strcat(ptr->string(), B.string ()); // присоединяем к ней и вторую строку
return * ptr // возвращаем значение, а не указатель (разыменовали)
}
Перегрузку можно проводить в трех случаях:
1) операция функция является компонентной функцией класса
2) операция функция является дружественной функцией класса
3) хотя бы один параметр – типа класс или ссылка на класс
Если операция – функция является компонентной функцией класса, обязательно не статической ( т. е функция вызывается и обрабатывает данные конкретного объекта),
то при определении у нее на один параметр меньше, одним параметром по умолчанию является тот объект для которого вызывается функция,
Заголовок выглядит так
Class A { …;};
A operator + (A tip1)
И выражение C+D трактуется как C.operator+ (D)
В рассматриваем случае С – это тот объект для которого вызывается функция.
3. class stroka {
char*ch // указатель на строку на символьный массив
int len // длина строки
public:
stroka(char*cch) // конструктор1
{ len = strlen(cch); ch=new char [len+1];
strcpy (ch,cch); };
stroka(int N=20) // конструктор 2
{ ch= new char[N+1}; len=0; ch[0]=”\0”}
int& len_str(void) { return len;} // возвращает ссылку на длину
//строки
char * string (void) {return ch;} // возвращает указатель на строку
void vivod () // выводит данные
{ cout<< “строка: “ <<ch <<”, длина строки=”<<len;};
~stroka() // деструктор
{ delete [ ]ch;};
stroka& operotor+(stroka& B);
}
stroka& stroka:: operotor+(stroka& B)
{ int N = this->len_str() +B.len_str();
stroka*ptr=new stroka(N); // выделяем память на суммарную строку
srtcpy(ptr->string(),this->string());// копируем в новую строку первую
// строку
strcat(ptr->string(), B.string ()); // присоединяем к ней и вторую строку
return * ptr // возвращаем значение, а не указатель (разыменовали)
}
Дата добавления: 2015-07-20; просмотров: 47 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Друзья классов | | | Классификация паровых турбин. |