C ++ Operadores - Parte 7 Introdução Esta é parte de minha série 7, Operadores do C ++. Nesta parte da série, nós olhamos o que é conhecido como operadores de ponteiro-para-membro. Há dois operadores de ponteiro-para-membro. Não vou explicar apenas os operadores de ponteiro-para-membro neste artigo; Vou explicar outras coisas que vão com ele que você pode não estar familiarizado. Nota: Se você não pode ver o código ou se você acha que alguma coisa está faltando (link quebrado, imagem ausente), apenas contacte-me em [email protected].
Ou seja, contacte-me para o menor problema que você tem sobre o que você está lendo. Pré-requisito Você deve ter lido a partir deste blog, artigos, "C ++ ponteiros", "C ++ Namespaces Basics" e "Ponteiros para Classes em C ++" ou artigos semelhantes antes de ler este. Estes três artigos estão entre as duas séries que mencionei nas partes anteriores desta série. Encadernação Imagine que você tem duas classes, A e B, e classe A é uma propriedade (objeto) da classe B. Você instanciar um objeto a partir de B. Em seguida, você modificar o objeto de propriedade de B, que é de classe A.
Você pode, então, vincular esta propriedade de B para o objeto de B para que os efeitos serão vistos em um objeto instanciado de A. Veremos exemplos abaixo. O operador binário. * Vejamos um exemplo que usa o operador *.. O operador consiste no ponto seguido pelo asterisco. Considere o seguinte código: #include using namespace std; class A {public: int propA; }; classe B {público: Um propB; }; A B :: * propBPtr = & B :: propB; int main () {B b; b.propB.propA = 9; A a = b * propBPtr.; cout retornar 0; } Duas classes, A e B são descritos. Classe A tem uma propriedade, propA, que é do tipo int.
Classe B tem uma propriedade, propB, o qual é da classe Um tipo. propB é uma instanciação de classe A. Após a descrição da classe B no código, você tem a instrução, AB :: * propBPtr = & B :: propB; Esta declaração é uma declaração de inicialização. O operador de ponteiro-para-membro funciona com um ponteiro para propB na classe B. Este é um ponteiro especial, porque é um ponteiro para a propriedade na descrição da classe e não a um objeto instanciado da classe. Observe que a propriedade na classe B que estamos falando aqui é do tipo A.
A descrição da classe é semelhante a uma descrição namespace. Então, para acessar uma propriedade de uma classe, é necessário o operador de escopo (: :) apenas como você precisa para acessar um identificador em uma descrição namespace. Vamos agora olhar para a declaração de inicialização: À direita do operador de atribuição simples você tem uma referência (& B :: propB) para a propriedade na descrição da classe B, que é do tipo, A. Note o uso do operador de escopo há.
À esquerda, você tem a declaração de ponteiro desta propriedade que está na descrição da classe B eo ponteiro está a apontar para uma propriedade do tipo A. Assim, a declaração ponteiro começa com A, B, em seguida, para a classe B, o operador de escopo, então ponteiro asterisco eo ponteiro; você pode dar o nome que você deseja para o ponteiro. Esta declaração é uma inicialização especial ponteiro. Agora vamos olhar para o que está na função principal. Na principal objeto de B, chamado b, é instanciado. A propriedade, propB do objeto b é então acessado. Esta propriedade é do tipo A.
O objetivo deste acesso é dar um valor à propriedade int da propriedade em b. Por isso, é propA do objecto, propB do objecto b que é efectivamente acedido. Então você começa com b, depois um ponto, então propB, em seguida, um ponto e, em seguida, propA. Bem, então você tem a atribuição de um int, que neste caso é 9. A próxima instrução usa o operador de ponteiro-para-membro. Ele se liga propB usando seu ponteiro para a propriedade na descrição da classe B. O ponteiro é o segundo operando da. * Operador e o objeto b é o primeiro operando do operador.
O resultado (ou valor de retorno) desta ligação é um objecto do tipo A. O resultado é atribuído (copiado) para um objecto com instâncias do tipo A no código; esse objeto é chamado, um está aqui citações da especificação C ++ sobre o operador de ligação, (. *). "O operador binário. * Vincula o seu segundo operando, o que deve ser do tipo" ponteiro para membro do T "(onde T é um tipo de classe completamente definido) para o primeiro operando, o que deve ser da classe T. O resultado é uma objeto do tipo especificado pelo segundo operando. ".
Agora, a próxima declaração exibe o valor da propriedade de um int. Este valor é 9, o que foi atribuído à propriedade int do objeto do tipo A, que é propriedade de uma descrição de classe B. Por causa da ligação, o novo objeto instanciado, uma, tem o valor de sua propriedade. O operador binário -> * Este operador começa com o símbolo -> seguido por *. O objectivo da presente operador ponteiro-para-membro é a mesma que a do operador anterior, mas o primeiro operando é um apontador para o objecto e b não o identificador b objecto.
O código a seguir mostra como usá-lo: #include using namespace std; class A {public: int propA; }; classe B {público: Um propB; }; A B :: * propBPtr = & B :: propB; int main () {B * bPtr; bPtr-> propB.propA = 9; A uma bPtr = -> * propBPtr; cout retornar 0; } No código acima, a instrução para o operador pointer-para-membro é, A a = bPtr -> * propBPtr; Os operadores ponteiro-para-membro operam a partir da esquerda para a direita. Você tem dois deles, que são * e -.>