|
|
1.1 ! root 1: // person.cpp : Defines the class behaviors for CPerson, CPersonList. ! 2: // ! 3: // This is a part of the Microsoft Foundation Classes C++ library. ! 4: // Copyright (C) 1992 Microsoft Corporation ! 5: // All rights reserved. ! 6: // ! 7: // This source code is only intended as a supplement to the ! 8: // Microsoft Foundation Classes Reference and Microsoft ! 9: // QuickHelp documentation provided with the library. ! 10: // See these sources for detailed information regarding the ! 11: // Microsoft Foundation Classes product. ! 12: ! 13: #include "person.h" ! 14: #include <string.h> ! 15: ! 16: #ifdef _DEBUG ! 17: #undef THIS_FILE ! 18: static char BASED_CODE THIS_FILE[] = __FILE__; ! 19: #endif ! 20: ! 21: //////////////////////////////////////////// ! 22: // ! 23: // Call 'IMPLEMENT_SERIAL' macro for all the ! 24: // classes declared in person.h ! 25: ! 26: IMPLEMENT_SERIAL( CPerson, CObject, 0 ) ! 27: IMPLEMENT_SERIAL( CPersonList, CObList, 0 ) ! 28: ! 29: ////////////////////////////////////////////// ! 30: // Define member functions for classes ! 31: // declared in person.h ! 32: // ! 33: ! 34: ////////////////////////////////////////////// ! 35: // CPerson::CPerson ! 36: // Copy Constructor for CPerson class ! 37: // ! 38: CPerson::CPerson( const CPerson& a ) ! 39: { ! 40: ASSERT_VALID( this ); ! 41: ASSERT_VALID( &a ); ! 42: m_LastName = a.m_LastName; ! 43: m_FirstName = a.m_FirstName; ! 44: m_PhoneNumber = a.m_PhoneNumber; ! 45: m_modTime = a.m_modTime; ! 46: } ! 47: ! 48: ////////////////////////////////////////////// ! 49: // CPerson::CPerson ! 50: // Memberwise Constructor for CPerson class ! 51: // ! 52: CPerson::CPerson( const char* pszLastName, ! 53: const char* pszFirstName, ! 54: const char* pszPhoneNum ) ! 55: { ! 56: ASSERT_VALID( this ); ! 57: m_LastName = pszLastName; ! 58: m_FirstName = pszFirstName; ! 59: m_PhoneNumber = pszPhoneNum; ! 60: m_modTime = CTime::GetCurrentTime(); ! 61: } ! 62: ! 63: ////////////////////////////////////////////// ! 64: // CPerson::operator= ! 65: // Overloaded operator= to perform assignments. ! 66: // ! 67: CPerson& CPerson::operator=( const CPerson& b ) ! 68: { ! 69: ASSERT_VALID( this ); ! 70: ASSERT_VALID( &b ); ! 71: m_LastName = b.m_LastName; ! 72: m_FirstName = b.m_FirstName; ! 73: m_PhoneNumber = b.m_PhoneNumber; ! 74: m_modTime = b.m_modTime; ! 75: return *this; ! 76: } ! 77: ! 78: /////////////////////////////////////////////// ! 79: // CPerson::Dump ! 80: // Write the contents of the object to a ! 81: // diagnostic context ! 82: // ! 83: // The overloaded '<<' operator does all the hard work ! 84: // ! 85: #ifdef _DEBUG ! 86: ! 87: void CPerson::Dump( CDumpContext& dc ) const ! 88: { ! 89: ASSERT_VALID( this ); ! 90: // Call base class function first ! 91: CObject::Dump( dc ); ! 92: ! 93: // Now dump data for this class ! 94: dc << "\n" ! 95: << "Last Name: " << m_LastName << "\n" ! 96: << "First Name: " << m_FirstName << "\n" ! 97: << "Phone #: " << m_PhoneNumber << "\n" ! 98: << "Modification date: " << m_modTime << "\n"; ! 99: } ! 100: ! 101: void CPerson::AssertValid() const ! 102: { ! 103: CObject::AssertValid(); ! 104: } ! 105: ! 106: #endif ! 107: ! 108: ///////////////////////////////////////////// ! 109: // CPerson::Serialize ! 110: // Read or write the contents of the object ! 111: // to an archive ! 112: // ! 113: void CPerson::Serialize( CArchive& archive ) ! 114: { ! 115: ASSERT_VALID( this ); ! 116: // Call base class function first ! 117: CObject::Serialize( archive ); ! 118: ! 119: // Now dump data for this class ! 120: if ( archive.IsStoring() ) ! 121: { ! 122: TRACE( "Serializing a CPerson out.\n" ); ! 123: archive << m_LastName << m_FirstName << m_PhoneNumber ! 124: << m_modTime; ! 125: } ! 126: else ! 127: { ! 128: TRACE( "Serializing a CPerson in.\n" ); ! 129: archive >> m_LastName >> m_FirstName >> m_PhoneNumber ! 130: >> m_modTime; ! 131: } ! 132: } ! 133: ! 134: ////////////////////////////////////////////////////////////////////////////// ! 135: // CPersonList ! 136: // We inherit most of the functionality from CObList. These are only ! 137: // functions that we added to form our own list type. ! 138: // ! 139: ! 140: ////////////////////////////////////////////// ! 141: // CPersonList::FindPerson ! 142: // ! 143: CPersonList* CPersonList::FindPerson( const char * szTarget ) ! 144: { ! 145: ASSERT_VALID( this ); ! 146: ! 147: CPersonList* pNewList = new CPersonList; ! 148: CPerson* pNext = NULL; ! 149: ! 150: // Start at front of list ! 151: POSITION pos = GetHeadPosition(); ! 152: ! 153: // Iterate over whole list ! 154: while( pos != NULL ) ! 155: { ! 156: // Get next element (note cast) ! 157: pNext = (CPerson*)GetNext(pos); ! 158: ! 159: // Add current element to new list if it matches ! 160: if ( _strnicmp( pNext->GetLastName(), szTarget, strlen( szTarget ) ) ! 161: == 0 ) ! 162: pNewList->AddTail(pNext); ! 163: } ! 164: ! 165: if ( pNewList->IsEmpty() ) ! 166: { ! 167: delete pNewList; ! 168: pNewList = NULL; ! 169: } ! 170: ! 171: return pNewList; ! 172: } ! 173: ! 174: ////////////////////////////////////////// ! 175: // CPersonList::DeleteAll ! 176: // This will delete the objects in the list as the pointers. ! 177: // ! 178: void CPersonList::DeleteAll() ! 179: { ! 180: ASSERT_VALID( this ); ! 181: POSITION pos = GetHeadPosition(); ! 182: ! 183: while( pos != NULL ) ! 184: { ! 185: delete GetNext(pos); ! 186: } ! 187: RemoveAll(); ! 188: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.