O modelo de objectos prevê apenas um metaobjecto por cada objecto ``normal''. Um objecto não partilha o metaobjecto com outros objectos. A funcionalidade do metaobjecto é simples: pode apenas controlar chamadas a métodos e acessos a variáveis. Não pode, por exemplo, configurar as relações para herança múltipla (possível no protocolo de metaobjectos do CLOS [Kiczales et al., 1991]). A simplicidade permite, porém, uma eficiente programação da linguagem.
O programa altera o comportamento de um objecto especificando a classe do seu metaobjecto. Um objecto que se comporte de modo diferente, devido à presença do seu metaobjecto, designa-se um objecto reflexivo, por forma a distingui-lo de um objecto normal, que não tem metaobjecto e se comporta da forma habitual. À parte o facto de terem que derivar de uma classe especial, MetaObj, as classes dos metaobjectos são classes normais C++.
Um objecto de uma classe refexiva não é sempre reflexivo. Isto deve-se ao facto de existirem, de facto, duas classes para um objecto, a classe original e a classe reflexiva, que é obtida por herança da não reflexiva, que continua disponível para o programador. Um objecto não reflexivo não pode mudar a sua natureza posteriormente, sendo sempre um simples objecto C++.
A aplicação de metaobjectos é recursiva, permitindo a definição de metaobjectos para metaobjectos.