House::House(const House &h)
{
       cout<<h.address<<"을 초기화 한다"<<endl;
       address = new char[strlen(h.address) + strlen("복사-1"+1)];
       strcpy(address,h.address);
       strcpy(address,"복사-1");
       space= h.space;
       telephone=h.telephone;
}

이렇게 되어있는데 밑의 데이터 멤버 h.space 와 h.telephone 은
왜 strcpy를 마저 이용해서 복사를 안해주는 건가요??

       strcpy(address,h.address);
       strcpy(address,"복사-1");
이걸 써주는건 대체 의도가 뭐죠?;;

strlen("복사 -1"+1)에서 "복사-1"은 메모리를 할당한 장소에 이름을 저장하는 것이라는데
이게 왜 필요한거죠?

다른 연산자들의 중복(overloading)을 보면 Fraction Fraction :: operator * (Fraction f) 로 정의 되는데
대입 연산자나 삽입 연산자 특히 대입 연산자는 왜 House& House::operator=(const House &h)
처럼 House &House-> 참조형이 있나요??

질문이 많아서 죄송합니다 간략히라도 좋으니 대답좀 해주세요 ㅠ