Oggetto C++ uguaglianza

Ho una classe MyCloth e un un oggetto istanza della classe che ho istanziato come questo:

MyCloth** cloth1;

E a un certo punto del programma, cercherò di fare qualcosa di simile a questo:

MyCloth** cloth2 = cloth1;

E poi, a un certo punto più avanti, voglio controllare per vedere se cloth1 e cloth2 sono le stesse. (Qualcosa di simile uguaglianza degli oggetti in Java, solo qui, MyCloth è molto complesso in classe e io posso”t costruire una isEqual funzione.)

Come posso fare questo controllo di uguaglianza? Stavo pensando che magari verifica se essi indicano gli stessi indirizzi. È una buona idea? Se è così, come posso fare?

Ti do non “oggetto di classe MyCloth“. Se credi che è davvero hanno a ripensare un sacco di C++.
…Perché il ptr ptr?
SB: stavo solo cercando di spiegare quello che voglio fare, so che posso”t avere un oggetto di classe MyCloth, ma io non so come inserirlo, io”m nuovo al C++ e cercando di capire come creare un progetto.
cloth1 e cloth2 sono puntatori di puntatori (ogni panno consiste di indicatori che definiscono i parametri, il comportamento, e così via)
I puntatori sono solo una posizione nello spazio di memoria. Si tratta di un indirizzo di una locazione di memoria. Il “tipo” del puntatore indica come interpretare gli zeri e uno in quella posizione. Quando si utilizza un puntatore a puntatore, si dispone di un indirizzo di un indirizzo. Niente di quello che hai punti a un’istanza di una classe. Tuttavia, se avete fatto inizializzazione di una classe, come ‘MyCloth* c1 = new MyCloth();’ Di utilizzare il ‘MyCloth* c2 = NULL;/*o qualunque*/ c1==c2;’ per verificare se è la stessa istanza per determinare se o non i due puntatori sono nella stessa memoria.Questo NON funziona con l’ereditarietà virtuale!

InformationsquelleAutor user2399378 | 2013-05-30

One Reply
  1. 12

    È possibile testare per oggetto identità confrontando gli indirizzi tenuto da due puntatori. Si parla di Java; questo è simile al test di due riferimenti sono uguali.

    MyCloth* pcloth1 = ...
    MyCloth* pcloth2 = ...
    if ( pcloth1 == pcloth2 ) {
        //Then both point at the same object.
    }   

    È possibile testare per oggetto uguaglianza confrontando il contenuto di due oggetti. In C++, questo di solito è fatto da definire operator==.

    class MyCloth {
       friend bool operator== (MyCloth & lhs, MyCloth & rhs );
       ...
    };
    
    bool operator== ( MyCloth & lhs, MyCloth & rhs )
    {
       return ...
    }

    Con l’operatore== definito, è possibile confrontare la parità:

    MyCloth cloth1 = ...
    MyCloth cloth2 = ...
    if ( cloth1 == cloth2 ) {
        //Then the two objects are considered to have equal values.
    }   
    Dato MyCloth *pcloth1, *pcloth2; come potrebbe confrontare il contenuto di due? il tuo esempio dimostra come farlo per non puntatori.
    @user2813274 — if ( *pcloth1 == *pcloth2 ) ...
    Come potete dire se è un controllo in cui i puntatori punto, o se il contenuto dei due posizioni sono le stesse?
    Il valore del tuo pcloth1 è un indirizzo. Il valore di *pcloth1 è un MyCloth oggetto. L’espressione *pcloth1 annulla il puntatore pcloth1. Dal momento che entrambi gli operandi nell’espressione sono MyCloth oggetti, i contenuti sono controllati, piuttosto che indirizzi.

    InformationsquelleAutor Andy Thomas

Lascia un commento