CObject OkreślonejCObject Class

Główna Klasa bazowa dla biblioteka MFC.The principal base class for the Microsoft Foundation Class Library.

SkładniaSyntax

class AFX_NOVTABLE CObject

Elementy członkowskieMembers

Konstruktory chronioneProtected Constructors

NazwaName OpisDescription
CObject::CObject Konstruktor domyślny.Default constructor.

Metody publicznePublic Methods

NazwaName OpisDescription
CObject::AssertValid Weryfikuje integralność tego obiektu.Validates this object's integrity.
CObject::Dump Tworzy zrzut diagnostyczny tego obiektu.Produces a diagnostic dump of this object.
CObject::GetRuntimeClass Zwraca CRuntimeClass strukturę odpowiadającą klasie tego obiektu.Returns the CRuntimeClass structure corresponding to this object's class.
CObject::IsKindOf Testuje relację tego obiektu z daną klasą.Tests this object's relationship to a given class.
CObject::IsSerializable Testuje, czy ten obiekt może być serializowany.Tests to see whether this object can be serialized.
CObject::Serialize Ładuje lub zapisuje obiekt z/do archiwum.Loads or stores an object from/to an archive.

Operatory publicznePublic Operators

NazwaName OpisDescription
CObject::operator delete delete Operator specjalny.Special delete operator.
CObject::operator new new Operator specjalny.Special new operator.

UwagiRemarks

Służy jako element główny nie tylko dla klas bibliotek, takich jak CFile i CObList , ale również dla klas, które można napisać.It serves as the root not only for library classes such as CFile and CObList, but also for the classes that you write. CObject oferuje podstawowe usługi, w tymCObject provides basic services, including

  • Obsługa serializacjiSerialization support
  • Informacje o klasie czasu wykonywaniaRun-time class information
  • Dane wyjściowe diagnostyki obiektówObject diagnostic output
  • Zgodność z klasami kolekcjiCompatibility with collection classes

CObject nie obsługuje dziedziczenia wielokrotnego.CObject doesn't support multiple inheritance. Klasy pochodne mogą mieć tylko jedną CObject klasę bazową i CObject muszą znajdować się po lewej stronie w hierarchii.Your derived classes can have only one CObject base class, and that CObject must be leftmost in the hierarchy. Istnieje jednak możliwość, że struktury i niepochodne klasy są dostępne w oddziałach CObject wielokrotnych dziedziczenia.It's permissible, however, to have structures and non- CObject-derived classes in right-hand multiple-inheritance branches.

CObjectW przypadku używania niektórych opcjonalnych makr w implementacji i deklaracjach klas należy realizować Najważniejsze korzyści.You'll realize major benefits from CObject derivation if you use some of the optional macros in your class implementation and declarations.

Makra pierwszego poziomu DECLARE_DYNAMIC i IMPLEMENT_DYNAMIC zezwalają na dostęp w czasie wykonywania do nazwy klasy i jej pozycji w hierarchii.The first-level macros, DECLARE_DYNAMIC and IMPLEMENT_DYNAMIC, permit run-time access to the class name and its position in the hierarchy. To z kolei umożliwia znaczący dumping diagnostyczny.This, in turn, allows meaningful diagnostic dumping.

Makra drugiego poziomu, DECLARE_SERIAL a IMPLEMENT_SERIAL także obejmują wszystkie funkcje makr pierwszego poziomu i umożliwiają "Serializowanie" obiektu do i z "archiwum".The second-level macros, DECLARE_SERIAL and IMPLEMENT_SERIAL, include all the functionality of the first-level macros, and they enable an object to be "serialized" to and from an "archive."

Aby uzyskać informacje na temat ogólnego i używania klas Microsoft Foundation CObject , zobacz Używanie CObject i serializacji.For information about deriving Microsoft Foundation classes and C++ classes in general and using CObject, see Using CObject and Serialization.

Hierarchia dziedziczeniaInheritance Hierarchy

CObject

WymaganiaRequirements

Nagłówek:afx.hHeader: afx.h

CObject:: AssertValidCObject::AssertValid

Weryfikuje integralność tego obiektu.Validates this object's integrity.

virtual void AssertValid() const;

UwagiRemarks

AssertValid sprawdza ważność tego obiektu, sprawdzając jego stan wewnętrzny.AssertValid performs a validity check on this object by checking its internal state. W wersji debugowania biblioteki program może potwierdzić, AssertValid a następnie przerwać ten program za pomocą komunikatu zawierającego listę numerów wierszy i nazwę pliku, w których potwierdzenie nie powiodło się.In the Debug version of the library, AssertValid may assert and then terminate the program with a message that lists the line number and filename where the assertion failed.

Podczas pisania własnej klasy należy przesłonić AssertValid funkcję w celu zapewnienia usług diagnostycznych dla siebie i innych użytkowników klasy.When you write your own class, you should override the AssertValid function to provide diagnostic services for yourself and other users of your class. Przesłonięte AssertValid zwykle wywołuje AssertValid funkcję swojej klasy bazowej przed sprawdzeniem składowych danych, które są unikatowe dla klasy pochodnej.The overridden AssertValid usually calls the AssertValid function of its base class before checking data members unique to the derived class.

Ponieważ AssertValid jest const funkcją, nie można zmienić stanu obiektu podczas testu.Because AssertValid is a const function, you aren't permitted to change the object state during the test. Własne funkcje klasy pochodnej nie powinny zgłaszać wyjątków, ale raczej należy zastanowić się, AssertValid czy wykryją nieprawidłowe dane obiektu.Your own derived class AssertValid functions shouldn't throw exceptions but rather should assert whether they detect invalid object data.

Definicja "ważność" zależy od klasy obiektu.The definition of "validity" depends on the object's class. Jako regułę, funkcja powinna wykonać "płytkie".As a rule, the function should do a "shallow check." Oznacza to, że jeśli obiekt zawiera wskaźniki do innych obiektów, powinien sprawdzić, czy wskaźniki nie są NULL , ale nie należy przeprowadzać testów ważności obiektów, do których odwołują się wskaźniki.That is, if an object contains pointers to other objects, it should check to see whether the pointers aren't NULL, but it shouldn't do validity testing on the objects referred to by the pointers.

PrzykładExample

Zobacz CObList::CObList , aby uzyskać listę CAge klasy używanej we wszystkich CObject przykładach.See CObList::CObList for a listing of the CAge class used in all CObject examples.

void CAge::AssertValid() const
{
   CObject::AssertValid();
   ASSERT(m_years > 0); 
   ASSERT(m_years < 105);
}

Aby uzyskać inny przykład, zobacz AfxDoForAllObjects .For another example, see AfxDoForAllObjects.

CObject:: CObjectCObject::CObject

Te funkcje są CObject konstruktorami standardowymi.These functions are the standard CObject constructors.

CObject();
CObject(const CObject& objectSrc);

ParametryParameters

objectSrcobjectSrc
Odwołanie do innego CObjectA reference to another CObject

UwagiRemarks

Wersja domyślna jest automatycznie wywoływana przez konstruktora klasy pochodnej.The default version is automatically called by the constructor of your derived class.

Jeśli klasa jest serializowana (obejmuje IMPLEMENT_SERIAL makro), w deklaracji klasy musi być używany Konstruktor domyślny (Konstruktor bez argumentów).If your class is serializable (it incorporates the IMPLEMENT_SERIAL macro), then you must have a default constructor (a constructor with no arguments) in your class declaration. Jeśli nie potrzebujesz domyślnego konstruktora, zadeklaruj prywatny lub chroniony Konstruktor "Empty".If you don't need a default constructor, declare a private or protected "empty" constructor. Aby uzyskać więcej informacji, Zobacz CObject using .For more information, see Using CObject.

Standardowy Konstruktor kopiowania klas w języku C++ wykonuje kopię składową z elementu członkowskiego.The standard C++ default class copy constructor does a member-by-member copy. Obecność prywatnego CObject konstruktora kopiującego gwarantuje komunikat o błędzie kompilatora, jeśli Konstruktor kopiujący klasy jest wymagany, ale nie jest dostępny.The presence of the private CObject copy constructor guarantees a compiler error message if the copy constructor of your class is needed but not available. Podaj Konstruktor kopiujący, jeśli Klasa wymaga tej funkcji.Provide a copy constructor if your class requires this capability.

PrzykładExample

Zobacz, CObList::CObList Aby uzyskać listę CAge klasy używanej w CObject przykładach.See CObList::CObList for a listing of the CAge class used in the CObject examples.

// Create a CAge object using the default constructor.
CAge age1;

// Create a CAge object using the copy constructor.
CAge age2(age1);

CObject::D UMPCObject::Dump

Zrzuca zawartość obiektu do CDumpContext obiektu.Dumps the contents of your object to a CDumpContext object.

virtual void Dump(CDumpContext& dc) const;

ParametryParameters

DCdc
Kontekst zrzutu diagnostyki dla zatopienia, zazwyczaj afxDump .The diagnostic dump context for dumping, usually afxDump.

UwagiRemarks

Podczas pisania własnej klasy należy przesłonić Dump funkcję w celu zapewnienia usług diagnostycznych dla siebie i innych użytkowników klasy.When you write your own class, you should override the Dump function to provide diagnostic services for yourself and other users of your class. Przesłonięte Dump zwykle wywołuje Dump funkcję swojej klasy bazowej przed przystąpieniem do drukowania składowych danych, które są unikatowe dla klasy pochodnej.The overridden Dump usually calls the Dump function of its base class before printing data members unique to the derived class. CObject::Dump Drukuje nazwę klasy, jeśli Klasa używa IMPLEMENT_DYNAMIC makra lub IMPLEMENT_SERIAL .CObject::Dump prints the class name if your class uses the IMPLEMENT_DYNAMIC or IMPLEMENT_SERIAL macro.

Uwaga

DumpFunkcja nie powinna drukować znaku nowego wiersza na końcu danych wyjściowych.Your Dump function shouldn't print a newline character at the end of its output.

Dump wywołania mają sens tylko w wersji debugowej biblioteka MFC.Dump calls make sense only in the Debug version of the Microsoft Foundation Class Library. Należy wywoływać nawiasy, deklaracje funkcji i implementacje funkcji z #ifdef _DEBUG #endif instrukcjami dla kompilacji warunkowej.You should bracket calls, function declarations, and function implementations with #ifdef _DEBUG, #endif statements for conditional compilation.

Ponieważ Dump jest const funkcją, nie można zmienić stanu obiektu podczas zrzutu.Since Dump is a const function, you aren't permitted to change the object state during the dump.

CDumpContext Operator wstawiania (<<) wywołuje Dump się, gdy CObject wskaźnik zostanie wstawiony.The CDumpContext insertion (<<) operator calls Dump when a CObject pointer is inserted.

Dump zezwala tylko na "acykliczne" dumpingu obiektów.Dump permits only "acyclic" dumping of objects. Można zrzucić listę obiektów, na przykład, jeśli jeden z obiektów jest samą listą, ostatecznie przepełni stos.You can dump a list of objects, for example, but if one of the objects is the list itself, you'll eventually overflow the stack.

PrzykładExample

Zobacz CObList::CObList , aby uzyskać listę CAge klasy używanej we wszystkich CObject przykładach.See CObList::CObList for a listing of the CAge class used in all CObject examples.

void CAge::Dump(CDumpContext& dc) const
{
   CObject::Dump(dc);
   dc << _T("Age = ") << m_years;
}

CObject:: GetRuntimeClassCObject::GetRuntimeClass

Zwraca CRuntimeClass strukturę odpowiadającą klasie tego obiektu.Returns the CRuntimeClass structure corresponding to this object's class.

virtual CRuntimeClass* GetRuntimeClass() const;

Wartość zwracanaReturn Value

Wskaźnik do CRuntimeClass struktury odpowiadającej klasie tego obiektu; nigdy nie NULL .A pointer to the CRuntimeClass structure corresponding to this object's class; never NULL.

UwagiRemarks

Istnieje jedna CRuntimeClass Struktura dla każdej CObject klasy pochodnej.There's one CRuntimeClass structure for each CObject-derived class. Elementy członkowskie struktury są następujące:The structure members are as follows:

  • LPCSTR m_lpszClassName Ciąg zakończony znakiem null zawierający nazwę klasy ASCII.LPCSTR m_lpszClassName A null-terminated string containing the ASCII class name.

  • int m_nObjectSize Rozmiar obiektu w bajtach.int m_nObjectSize The size of the object, in bytes. Jeśli obiekt ma elementy członkowskie danych wskazujące przydzieloną pamięć, rozmiar tej pamięci nie jest uwzględniony.If the object has data members that point to allocated memory, the size of that memory isn't included.

  • UINT m_wSchema Numer schematu (-1 dla klas, które nie są serializowane).UINT m_wSchema The schema number ( -1 for nonserializable classes). Zobacz IMPLEMENT_SERIAL makro, aby uzyskać opis numeru schematu.See the IMPLEMENT_SERIAL macro for a description of schema number.

  • CObject* (PASCAL* m_pfnCreateObject)() Wskaźnik funkcji do domyślnego konstruktora, który tworzy obiekt klasy (prawidłowy tylko wtedy, gdy klasa obsługuje tworzenie dynamiczne; w przeciwnym razie zwraca NULL ).CObject* (PASCAL* m_pfnCreateObject)() A function pointer to the default constructor that creates an object of your class (valid only if the class supports dynamic creation; otherwise, returns NULL).

  • CRuntimeClass* (PASCAL* m_pfn_GetBaseClass )() Jeśli aplikacja jest dynamicznie połączona z wersją AFXDLL MFC, wskaźnik do funkcji, która zwraca CRuntimeClass strukturę klasy podstawowej.CRuntimeClass* (PASCAL* m_pfn_GetBaseClass )() If your application is dynamically linked to the AFXDLL version of MFC, a pointer to a function that returns the CRuntimeClass structure of the base class.

  • CRuntimeClass* m_pBaseClass Jeśli aplikacja jest statycznie połączona z MFC, wskaźnik do CRuntimeClass struktury klasy bazowej.CRuntimeClass* m_pBaseClass If your application is statically linked to MFC, a pointer to the CRuntimeClass structure of the base class.

Ta funkcja wymaga użycia w IMPLEMENT_DYNAMIC IMPLEMENT_DYNCREATE IMPLEMENT_SERIAL implementacji klasy lub makra.This function requires use of the IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE, or IMPLEMENT_SERIAL macro in the class implementation. W przeciwnym razie otrzymasz nieprawidłowe wyniki.You'll get incorrect results otherwise.

PrzykładExample

Zobacz CObList::CObList , aby uzyskać listę CAge klasy używanej we wszystkich CObject przykładach.See CObList::CObList for a listing of the CAge class used in all CObject examples.

CAge a(21);
CRuntimeClass* prt = a.GetRuntimeClass();
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);

CObject:: IsKindOfCObject::IsKindOf

Testuje relację tego obiektu z daną klasą.Tests this object's relationship to a given class.

BOOL IsKindOf(const CRuntimeClass* pClass) const;

ParametryParameters

pClass
Wskaźnik do CRuntimeClass struktury skojarzonej z CObject klasą pochodną.A pointer to a CRuntimeClass structure associated with your CObject-derived class.

Wartość zwracanaReturn Value

Różne od zera, jeśli obiekt odpowiada klasie; w przeciwnym razie 0.Nonzero if the object corresponds to the class; otherwise 0.

UwagiRemarks

Ta funkcja sprawdza, pClass czy (1) jest obiektem określonej klasy lub (2) jest obiektem klasy pochodzącej od określonej klasy.This function tests pClass to see if (1) it's an object of the specified class or (2) it's an object of a class derived from the specified class. Ta funkcja działa tylko dla klas zadeklarowanych za pomocą DECLARE_DYNAMIC , DECLARE_DYNCREATE lub DECLARE_SERIAL .This function works only for classes declared with the DECLARE_DYNAMIC, DECLARE_DYNCREATE, or DECLARE_SERIAL macro.

Nie używaj tej funkcji w szerokim stopniu, ponieważ obniża ona funkcję polimorfizmu języka C++.Don't use this function extensively because it defeats the C++ polymorphism feature. Zamiast tego użyj funkcji wirtualnych.Use virtual functions instead.

PrzykładExample

Zobacz CObList::CObList , aby uzyskać listę CAge klasy używanej we wszystkich CObject przykładach.See CObList::CObList for a listing of the CAge class used in all CObject examples.

CAge a(21);  // Must use IMPLEMENT_DYNAMIC, IMPLEMENT _DYNCREATE, or
             // IMPLEMENT_SERIAL
ASSERT(a.IsKindOf(RUNTIME_CLASS(CAge)));
ASSERT(a.IsKindOf(RUNTIME_CLASS(CObject)));

CObject:: isserializacjaCObject::IsSerializable

Sprawdza, czy ten obiekt kwalifikuje się do serializacji.Tests whether this object is eligible for serialization.

BOOL IsSerializable() const;

Wartość zwracanaReturn Value

Niezerowe, jeśli ten obiekt może być serializowany; w przeciwnym razie 0.Nonzero if this object can be serialized; otherwise 0.

UwagiRemarks

Aby można było serializować klasę, jej Deklaracja musi zawierać DECLARE_SERIAL makro, a implementacja musi zawierać IMPLEMENT_SERIAL makro.For a class to be serializable, its declaration must contain the DECLARE_SERIAL macro, and the implementation must contain the IMPLEMENT_SERIAL macro.

Uwaga

Nie Przesłoń tej funkcji.Don't override this function.

PrzykładExample

Zobacz CObList::CObList , aby uzyskać listę CAge klasy używanej we wszystkich CObject przykładach.See CObList::CObList for a listing of the CAge class used in all CObject examples.

CAge a(21);
ASSERT(a.IsSerializable());

CObject:: operator — usuwanieCObject::operator delete

Dla wydanej wersji biblioteki operator delete zwalnia pamięć przydzieloną przez operatora new .For the Release version of the library, operator delete frees the memory allocated by operator new.

void PASCAL operator delete(void* p);

void PASCAL operator delete(
    void* p,
    void* pPlace);

void PASCAL operator delete(
    void* p,
    LPCSTR lpszFileName,
    int nLine);

UwagiRemarks

W wersji Debug operator delete uczestniczy w schemacie monitorowania alokacji zaprojektowanym do wykrywania przecieków pamięci.In the Debug version, operator delete participates in an allocation-monitoring scheme designed to detect memory leaks.

Jeśli używasz wiersza koduIf you use the code line

#define new DEBUG_NEW

przed dowolnymi implementacjami w programie. Plik CPP, a następnie delete zostanie użyta trzecia wersja programu, która przechowuje nazwę pliku i numer wiersza w przydzielonym bloku na potrzeby późniejszego raportowania.before any of your implementations in a .CPP file, then the third version of delete will be used, storing the filename and line number in the allocated block for later reporting. Nie musisz martwić się o dostarczenie dodatkowych parametrów; makro zajmie się tym, że.You don't have to worry about supplying the extra parameters; a macro takes care of that for you.

Nawet jeśli nie używasz DEBUG_NEW w trybie debugowania, nadal będziesz mieć możliwość wykrywania przecieków, ale bez określonego powyżej raportowania liczby wierszy pliku źródłowego.Even if you don't use DEBUG_NEW in Debug mode, you still get leak detection, but without the source-file line-number reporting described above.

Jeśli zastąpisz operatory new i delete , ta możliwość diagnostyki zostanie utracona.If you override operators new and delete, you forfeit this diagnostic capability.

PrzykładExample

Zobacz, CObList::CObList Aby uzyskać listę CAge klasy używanej w CObject przykładach.See CObList::CObList for a listing of the CAge class used in the CObject examples.

void CAge::operator delete(void* p)
{
   free(p);
}

void CAge::operator delete(void *p, LPCSTR lpszFileName, int nLine)
{
   UNREFERENCED_PARAMETER(lpszFileName);
   UNREFERENCED_PARAMETER(nLine);
   free(p);
}

CObject:: operator newCObject::operator new

W przypadku wersji biblioteki, operator new wykonuje optymalną alokację pamięci w sposób podobny do malloc .For the Release version of the library, operator new does an optimal memory allocation in a manner similar to malloc.

void* PASCAL operator new(size_t nSize);
void* PASCAL operator new(size_t, void* p);

void* PASCAL operator new(
    size_t nSize,
    LPCSTR lpszFileName,
    int nLine);

UwagiRemarks

W wersji Debug operator new uczestniczy w schemacie monitorowania alokacji zaprojektowanym do wykrywania przecieków pamięci.In the Debug version, operator new participates in an allocation-monitoring scheme designed to detect memory leaks.

Jeśli używasz wiersza koduIf you use the code line

#define new DEBUG_NEW

przed dowolnymi implementacjami w programie. Plik CPP, a następnie new zostanie użyta druga wersja programu, która przechowuje nazwę pliku i numer wiersza w przydzielonym bloku na potrzeby późniejszego raportowania.before any of your implementations in a .CPP file, then the second version of new will be used, storing the filename and line number in the allocated block for later reporting. Nie musisz martwić się o dostarczenie dodatkowych parametrów; makro zajmie się tym, że.You don't have to worry about supplying the extra parameters; a macro takes care of that for you.

Nawet jeśli nie używasz DEBUG_NEW w trybie debugowania, nadal będziesz mieć możliwość wykrywania przecieków, ale bez określonego powyżej raportowania liczby wierszy pliku źródłowego.Even if you don't use DEBUG_NEW in Debug mode, you still get leak detection, but without the source-file line-number reporting described above.

Uwaga

W przypadku zastąpienia tego operatora należy również przesłonić delete .If you override this operator, you must also override delete. Nie używaj standardowej funkcji biblioteki _new_handler .Don't use the standard library _new_handler function.

PrzykładExample

Zobacz, CObList::CObList Aby uzyskać listę CAge klasy używanej w CObject przykładach.See CObList::CObList for a listing of the CAge class used in the CObject examples.

void* CAge::operator new(size_t nSize)
{
   return malloc(nSize);
}

void* CAge::operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
{
   UNREFERENCED_PARAMETER(lpszFileName);
   UNREFERENCED_PARAMETER(nLine);
   return malloc(nSize);
}

CObject:: serializowaćCObject::Serialize

Odczytuje lub zapisuje ten obiekt z lub do archiwum.Reads or writes this object from or to an archive.

virtual void Serialize(CArchive& ar);

ParametryParameters

ar
CArchiveObiekt do serializacji do lub z.A CArchive object to serialize to or from.

UwagiRemarks

Przesłoń Serialize dla każdej klasy, która ma zostać zserializowana.Override Serialize for each class that you intend to serialize. Zastąpiony Serialize musi najpierw wywołać Serialize funkcję swojej klasy bazowej.The overridden Serialize must first call the Serialize function of its base class.

Należy również użyć DECLARE_SERIAL makra w deklaracji klasy i należy użyć IMPLEMENT_SERIAL makra w implementacji.You must also use the DECLARE_SERIAL macro in your class declaration, and you must use the IMPLEMENT_SERIAL macro in the implementation.

Użyj CArchive::IsLoading lub, CArchive::IsStoring Aby określić, czy archiwum jest ładowane, czy przechowywane.Use CArchive::IsLoading or CArchive::IsStoring to determine whether the archive is loading or storing.

Serialize jest wywoływana przez CArchive::ReadObject i CArchive::WriteObject .Serialize is called by CArchive::ReadObject and CArchive::WriteObject. Te funkcje są skojarzone z CArchive operatorem wstawiania ( << ) i operatorem ekstrakcji ( >> ).These functions are associated with the CArchive insertion operator ( <<) and extraction operator ( >>).

Przykłady serializacji można znaleźć w artykule Serializowanie obiektu.For serialization examples, see the article Serializing an Object.

PrzykładExample

Zobacz CObList::CObList , aby uzyskać listę CAge klasy używanej we wszystkich CObject przykładach.See CObList::CObList for a listing of the CAge class used in all CObject examples.

void CAge::Serialize(CArchive& ar)
{
   CObject::Serialize(ar);
   if(ar.IsStoring())
      ar << m_years;
   else
      ar >> m_years;
}

Zobacz takżeSee also

Wykres hierarchiiHierarchy Chart