_INSTANTIATING CODE PATTERNS_ by Fred Wild Listing Four #include "pets.hxx" ////////////////////////////////////////////////////////// // class PetOwner PetOwner::PetOwner() { m_Pet = NULL; m_Vet = NULL; } PetOwner::PetOwner(const PetOwner& obj) { m_Name = obj.m_Name; m_Pet = obj.m_Pet->makeCopy(); m_Vet = obj.m_Vet; } PetOwner *PetOwner::makeCopy() const { return new PetOwner(*this); } PetOwner::~PetOwner() { delete m_Pet ; } PetOwner & PetOwner::operator=(const PetOwner &rhs) { if (this == &rhs) return *this ; // No changes if assignment to self m_Name = rhs.m_Name; m_Pet = rhs.m_Pet->makeCopy(); m_Vet = rhs.m_Vet; return *this ; } ////////////////////////////////////////////////////////// // class Veterinarian Veterinarian::Veterinarian() { } Veterinarian::Veterinarian(const Veterinarian& obj) { m_Name = obj.m_Name; m_StreetAddress = obj.m_StreetAddress; m_Town = obj.m_Town; m_Phone = obj.m_Phone; } Veterinarian *Veterinarian::makeCopy() const { return new Veterinarian(*this); } Veterinarian::~Veterinarian() { } Veterinarian & Veterinarian::operator=(const Veterinarian &rhs) { if (this == &rhs) return *this ; // No changes if assignment to self m_Name = rhs.m_Name; m_StreetAddress = rhs.m_StreetAddress; m_Town = rhs.m_Town; m_Phone = rhs.m_Phone; return *this ; } ////////////////////////////////////////////////////////// // class Pet Pet::Pet() { } Pet::Pet(const Pet& obj) { m_Name = obj.m_Name; m_KindOfPet = obj.m_KindOfPet; } Pet *Pet::makeCopy() const { return new Pet(*this); } Pet::~Pet() { } Pet & Pet::operator=(const Pet &rhs) { if (this == &rhs) return *this ; // No changes if assignment to self m_Name = rhs.m_Name; m_KindOfPet = rhs.m_KindOfPet; return *this ; }