Появился глупый вопрос "А ПОЧЕМУ ЭТО РАБОТАЕТ?".
Так вот ,почему функция "cpy" работает ,как с обьектом класса
a.cpy(b).print();
так и с простой строкой
a.cpy(ca).print();
a.cpy("rap").print();
?
Если она принимает
String &String::cpy(const String& a){}
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
class String
{
public:
String();//конструктор по умолчанию
String(const String &st);//конструктор глубого копирования
String(const char *str);//конструктор по принимаемой строке
~String();//деструктор
//int length() const;//функция возврата длины строки
String& cpy(const String& a);//функция копирования а в строку
//String& cat(const String& b);//функция сцепления строки b и строки
//int cmp(const String& c)const;//функция проверки строк на эквивалентность
//String& str(const String& a, const String& b);//поиск подстроки b в а
void print() const;//функция вывода строки в консоль
private:
int len;//длина строки
char *s;//строка
};
String::String()//конструктор по умолчанию
{
len=1;//длине строки присваеваем 1
s=new char[len];//выделяем память для строки s динной l
s[0]='\0';//записываем пустую строку
}
String::String(const char *str)//конструктор по принимаемой строке
{
len=strlen(str)+1;//длине строки присваеваем длину входящей строки +1
s=new char[len];//выделяем память для строки s динной len
strcpy(s,str);//копируем вдящую строку в строку s
}
String::String(const String& st)//конструктор глубого копирования
{
len=st.len;//длине строки присваеваем длину входящей строки
s=new char[len];//выделяем память для строки s динной len
strcpy(s,st.s);//копируем вдящую строку в строку s
}
String::~String()//деструктор
{
delete []s;//удаляем s
}
int String::length()const//функция возврата длины строки
{
return len-1;//возращаем длину строки
}
String &String::cpy(const String& a)//функция копирования а в строку
{
if(!strcmp(s,a.s))//проверям на эквиваленткность строку s и входящую строку
return *this;
len=a.len;//длине строки присваеваем длину входящей строки
delete []s;//удаляем строку s
s=new char[len];//выделяем память для строки s динной len
strcpy(s,a.s);//копируем входящую строку в строку s
return *this;
}
void String::print() const//функция вывода строки в консоль
{
cout<<" "<<s<<" "<<endl;//выводим строку s
}
int main(){
const char *ca="wety";
String a("Hello"),b(a);
a.cpy(b).print();
a.cpy(ca).print();
a.cpy("rap").print();
}
Все работает и выводит :
"
er
qwerty
wety
rap
"
но все таки почему "оно" так?
Заранее всем спасибо за ответ !!!