Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
A principal classe base para a Microsoft Foundation Class Library.
Sintaxe
class AFX_NOVTABLE CObject
Membros
Construtores Protegidos
| Nome | Description |
|---|---|
CObject::CObject |
Construtor padrão. |
Métodos Públicos
| Nome | Description |
|---|---|
CObject::AssertValid |
Valida a integridade deste objeto. |
CObject::Dump |
Produz um dump diagnóstico deste objeto. |
CObject::GetRuntimeClass |
Devolve a CRuntimeClass estrutura correspondente à classe deste objeto. |
CObject::IsKindOf |
Testa a relação deste objeto com uma determinada classe. |
CObject::IsSerializable |
Testes para ver se este objeto pode ser serializado. |
CObject::Serialize |
Carrega ou armazena um objeto de/para um arquivo. |
Operadores Públicos
| Nome | Description |
|---|---|
CObject::operator delete |
Operador especial delete . |
CObject::operator new |
Operador especial new . |
Observações
Serve de raiz não só para classes de biblioteca como CFile e CObList, mas também para as classes que escreves.
CObject fornece serviços básicos, incluindo
- Suporte para serialização
- Informação da classe em tempo de execução
- Saída de diagnóstico de objetos
- Compatibilidade com classes de coleção
CObject Não suporta múltiplas heranças. As tuas classes derivadas podem ter apenas uma CObject classe base, e essa CObject deve ser a mais à esquerda na hierarquia. É permitido, no entanto, ter estruturas e classes não CObjectderivadas em ramos de múltipla herança à direita.
Vais perceber grandes benefícios com CObject a derivação se usares algumas das macros opcionais na implementação e declarações da tua classe.
As macros de primeiro nível, DECLARE_DYNAMIC e IMPLEMENT_DYNAMIC, permitem o acesso em tempo de execução ao nome da classe e à sua posição na hierarquia. Isto, por sua vez, permite um despejo diagnóstico significativo.
Os macros de segundo nível, DECLARE_SERIAL e IMPLEMENT_SERIAL, incluem toda a funcionalidade dos macros de primeiro nível, e permitem que um objeto seja "serializado" para e a partir de um "arquivo".
Para informações sobre a derivação de classes Microsoft Foundation e classes C++ em geral e sobre o uso CObjectde , veja Uso de CObject e Serialização.
Hierarquia de herança
CObject
Requerimentos
Cabeçalho:afx.h
CObject::AssertValid
Valida a integridade deste objeto.
virtual void AssertValid() const;
Observações
AssertValid Realiza uma verificação de validade sobre este objeto verificando o seu estado interno. Na versão Debug da biblioteca, AssertValid pode afirmar e depois terminar o programa com uma mensagem que lista o número da linha e o nome do ficheiro onde a asserção falhou.
Quando escreves a tua própria classe, deves sobrepor a AssertValid função para fornecer serviços de diagnóstico para ti e para outros utilizadores da tua classe. A sobreposição AssertValid normalmente chama a AssertValid função da sua classe base antes de verificar os membros de dados únicos da classe derivada.
Como AssertValid é uma const função, não é permitido mudar o estado do objeto durante o teste. As suas próprias funções de classe AssertValid derivadas não devem lançar exceções, mas sim afirmar se detetam dados de objetos inválidos.
A definição de "validade" depende da classe do objeto. Regra geral, a função deve fazer um "teste superficial". Ou seja, se um objeto contém ponteiros para outros objetos, deve verificar se os ponteiros não NULLsão , mas não deve fazer testes de validade nos objetos referidos pelos ponteiros.
Example
Veja CObList::CObList uma lista das CAge classes usadas em todos CObject os exemplos.
void CAge::AssertValid() const
{
CObject::AssertValid();
ASSERT(m_years > 0);
ASSERT(m_years < 105);
}
Para outro exemplo, veja AfxDoForAllObjects.
CObject::CObject
Estas funções são os construtores padrão CObject .
CObject();
CObject(const CObject& objectSrc);
Parâmetros
objectSrc
Uma referência a outro CObject
Observações
A versão padrão é automaticamente chamada pelo construtor da sua classe derivada.
Se a sua classe for serializável (incorpora o IMPLEMENT_SERIAL macro), então deve ter um construtor padrão (um construtor sem argumentos) na sua declaração de classe. Se não precisares de um construtor padrão, declara um construtor privado ou protegido "vazio". Para mais informações, consulte Utilização CObjectde .
O construtor padrão C++ de copy class copy faz uma cópia membro a membro. A presença do construtor de cópias privadas CObject garante uma mensagem de erro do compilador se o construtor de cópia da sua classe for necessário mas não estiver disponível. Forneça um construtor de cópias se a sua classe exigir esta capacidade.
Example
Veja CObList::CObList uma lista das CAge classes usadas nos CObject exemplos.
// Create a CAge object using the default constructor.
CAge age1;
// Create a CAge object using the copy constructor.
CAge age2(age1);
CObject::Dump
Despeja o conteúdo do teu objeto para um CDumpContext objeto.
virtual void Dump(CDumpContext& dc) const;
Parâmetros
dc
O contexto de dump de diagnóstico para dumping, normalmente afxDump.
Observações
Quando escreves a tua própria classe, deves sobrepor a Dump função para fornecer serviços de diagnóstico para ti e para outros utilizadores da tua classe. O sobreposto Dump normalmente chama a Dump função da sua classe base antes de imprimir os membros de dados únicos da classe derivada.
CObject::Dump Imprime o nome da turma se a tua turma usar a IMPLEMENT_DYNAMIC macro OR IMPLEMENT_SERIAL .
Observação
A tua Dump função não deve imprimir um carácter de nova linha no final da sua saída.
Dump as chamadas só fazem sentido na versão Debug da Microsoft Foundation Class Library. Deves colocar entre chaves chamadas, declarações de função e implementações de funções com #ifdef _DEBUGinstruções , #endif para compilação condicional.
Como Dump é uma const função, não é permitido alterar o estado do objeto durante o dump.
O CDumpContext operador de inserção (<<) chama Dump quando um CObject ponteiro é inserido.
Dump permite apenas despejo "acíclico" de objetos. Pode, por exemplo, despejar uma lista de objetos, mas se um dos objetos for a própria lista, acabará por saturar a pilha.
Example
Veja CObList::CObList uma lista das CAge classes usadas em todos CObject os exemplos.
void CAge::Dump(CDumpContext& dc) const
{
CObject::Dump(dc);
dc << _T("Age = ") << m_years;
}
CObject::GetRuntimeClass
Devolve a CRuntimeClass estrutura correspondente à classe deste objeto.
virtual CRuntimeClass* GetRuntimeClass() const;
Valor de retorno
Um apontador para a CRuntimeClass estrutura correspondente à classe deste objeto; nunca NULL.
Observações
Existe uma CRuntimeClass estrutura para cada CObjectclasse derivada em . Os membros estruturais são os seguintes:
LPCSTR m_lpszClassNameUma cadeia terminada por nulo contendo o nome da classe ASCII.int m_nObjectSizeO tamanho do objeto, em bytes. Se o objeto tiver membros de dados que apontam para a memória alocada, o tamanho dessa memória não é incluído.UINT m_wSchemaO número do esquema (-1 para classes não serializáveis). Veja aIMPLEMENT_SERIALmacro para uma descrição do número do esquema.CObject* (PASCAL* m_pfnCreateObject)()Um ponteiro de função para o construtor padrão que cria um objeto da sua classe (válido apenas se a classe suportar a criação dinâmica; caso contrário, devolveNULL).CRuntimeClass* (PASCAL* m_pfn_GetBaseClass )()Se a sua aplicação estiver dinamicamente ligada à versão AFXDLL do MFC, um apontador para uma função que devolve aCRuntimeClassestrutura da classe base.CRuntimeClass* m_pBaseClassSe a sua aplicação estiver ligada estaticamente ao MFC, um apontador para aCRuntimeClassestrutura da classe base.
Esta função requer o uso do IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE, ou IMPLEMENT_SERIAL macro na implementação da classe. Caso contrário, vais obter resultados incorretos.
Example
Veja CObList::CObList uma lista das CAge classes usadas em todos CObject os exemplos.
CAge a(21);
CRuntimeClass* prt = a.GetRuntimeClass();
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);
CObject::IsKindOf
Testa a relação deste objeto com uma determinada classe.
BOOL IsKindOf(const CRuntimeClass* pClass) const;
Parâmetros
pClass
Um apontador para uma CRuntimeClass estrutura associada à sua CObjectclasse derivada em .
Valor de retorno
Não nulo se o objeto corresponder à classe; caso contrário, 0.
Observações
Esta função testa pClass se (1) é um objeto da classe especificada ou (2) é um objeto de uma classe derivada da classe especificada. Esta função funciona apenas para classes declaradas com o DECLARE_DYNAMIC, DECLARE_DYNCREATE, ou DECLARE_SERIAL macro.
Não uses esta função extensivamente porque ela anula a funcionalidade de polimorfismo C++. Use funções virtuais em vez disso.
Example
Veja CObList::CObList uma lista das CAge classes usadas em todos CObject os exemplos.
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::IsSerializable
Testa se este objeto é elegível para serialização.
BOOL IsSerializable() const;
Valor de retorno
Não nulo se este objeto puder ser serializado; caso contrário, 0.
Observações
Para que uma classe seja serializável, a sua declaração deve conter a DECLARE_SERIAL macro, e a implementação deve conter a IMPLEMENT_SERIAL macro.
Observação
Não sobrepiques esta função.
Example
Veja CObList::CObList uma lista das CAge classes usadas em todos CObject os exemplos.
CAge a(21);
ASSERT(a.IsSerializable());
CObject::operator delete
Para a versão Release da biblioteca, o operador delete liberta a memória alocada pelo operador 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);
Observações
Na versão Debug, o operador delete participa num esquema de monitorização de alocação concebido para detetar fugas de memória.
Se usares a linha de código
#define new DEBUG_NEW
antes de qualquer uma das tuas implementações num . CPP, depois será usada a terceira versão delete , armazenando o nome do ficheiro e o número de linha no bloco alocado para relatórios posteriores. Não tens de te preocupar em fornecer os parâmetros extra; Um macro trata disso por ti.
Mesmo que não uses DEBUG_NEW em modo Debug, ainda obténs deteção de fugas, mas sem o relatório do número de linha do ficheiro de origem descrito acima.
Se sobrepor operadores new e delete, perde esta capacidade de diagnóstico.
Example
Veja CObList::CObList uma lista das CAge classes usadas nos CObject exemplos.
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 new
Para a versão Release da biblioteca, o operador new faz uma alocação ótima de memória de forma semelhante a 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);
Observações
Na versão Debug, o operador new participa num esquema de monitorização de alocação concebido para detetar fugas de memória.
Se usares a linha de código
#define new DEBUG_NEW
antes de qualquer uma das tuas implementações num . CPP, depois será usada a segunda versão new , armazenando o nome do ficheiro e o número de linha no bloco alocado para relatórios posteriores. Não tens de te preocupar em fornecer os parâmetros extra; Um macro trata disso por ti.
Mesmo que não uses DEBUG_NEW em modo Debug, ainda obténs deteção de fugas, mas sem o relatório do número de linha do ficheiro de origem descrito acima.
Observação
Se sobrepor este operador, também deve sobrepor delete. Não uses a função padrão da biblioteca _new_handler .
Example
Veja CObList::CObList uma lista das CAge classes usadas nos CObject exemplos.
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::Serialize
Lê ou escreve este objeto a partir de ou para um arquivo.
virtual void Serialize(CArchive& ar);
Parâmetros
ar
Um CArchive objeto para serializar para ou a partir de.
Observações
Substitui Serialize para cada classe que pretendes serializar. O sobreposto Serialize deve primeiro chamar a Serialize função da sua classe base.
Também deve usar a DECLARE_SERIAL macro na sua declaração de classe e deve usar a IMPLEMENT_SERIAL macro na implementação.
CArchive::IsLoading Use ou CArchive::IsStoring para determinar se o arquivo está a carregar ou a armazenar.
Serialize é chamado por CArchive::ReadObject e CArchive::WriteObject. Estas funções estão associadas ao CArchive operador de inserção ( <<) e ao operador de extração ( >>).
Para exemplos de serialização, veja o artigo Serializar um Objeto.
Example
Veja CObList::CObList uma lista das CAge classes usadas em todos CObject os exemplos.
void CAge::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if(ar.IsStoring())
ar << m_years;
else
ar >> m_years;
}