Problema lettura operatore logico

di il
5 risposte

Problema lettura operatore logico

Ciao a tutti, sto cercando di capire come funziona questa struct ma mi serve una mano:
struct Special_point {
Special_point() {}
Special_point(int x, int y) : pt(x, y), next_on_hull(0) {}
CGAL::Point_2<Rep_class> pt;
Special_point *next_on_hull;
};
1)Special_point() {} Mi da la possibilità di creare un array di special point giusto?

2)Special_point(int x, int y) : pt(x, y), next_on_hull(0) {} qui non capisco il ":" cosa indica? Come capisco il suo significato?

5 Risposte

  • Re: Problema lettura operatore logico

    Sono due costruttori della struttura, non creano degli array. Cosa sai delle classi/strutture?

    i due punti indicano l'inizio degli inizializzatori dei mebri della classe/struttura.
  • Re: Problema lettura operatore logico

    skynet ha scritto:


    Sono due costruttori della struttura, non creano degli array. Cosa sai delle classi/strutture?

    i due punti indicano l'inizio degli inizializzatori dei mebri della classe/struttura.

    Ho un infarinatura generale delle strutture e delle classi. Le classi sono sostanzialmente dei gruppi di oggetti e le struct dei contenitori di oggetti. In questo caso definisco una struct Special_point che inizia definendo Special_point() {}

    Special_point() a me sembra la dichiarazione di una funzione void? Poi non capisco perché ci sono le parentesi{} e a cosa sevono.

    I due punti non li ho mai visti utilizzati dentro una struct ma solo nelle classi quindi non capisco bene come agisce ne capisco a cosa servono le altre parentesi aperte e chiuse dopo next_on_hull(0) {}
    Poi ho la definizione del punto pt preso dal namespace CGAL e la definizione di un puntatore Special_point *next_on_hull utilizzati prima nella struct.

    ma non capisco il significato delle riche precedenti.
  • Re: Problema lettura operatore logico

    La differenza tra struct e class in C++ è solo nella dichiarazione.

    Una struct ha per definizione i suoi membri pubblici, una classe li ha privati.
    NESSUN ALTRA DISTINZIONE (scusa il maiuscolo)

    Quindi non confonderti ma le stesse cose che puoi fare con un class li puoi fare con lo struct.

    Se il costruttore te lo scrivessi così:
    .h
    struct Special_point {
    Special_point();
    Special_point(int x, int y);
    CGAL::Point_2<Rep_class> pt;
    Special_point *next_on_hull;
    };
    .cpp
    
    Special_point::Special_point()
    {
    }
    
    Special_point::Special_point(int x, int y)
    : pt(x, y)
    , next_on_hull(0)
    {
    }
    
    sarebbe più facile per te capirlo?
    Come vedi posso fare le stesse cose che si possono fare con le classi con l'unica differenza che se non dichiari un membro (variabile/funzione) come privata, questa sarà pubblica di default.
  • Re: Problema lettura operatore logico

    Si, quindi con:
    Special_point::Special_point()
    {
    }
    Chiamo una funzione void dal contenuto vuoto

    E con
    Special_point::Special_point(int x, int y)
    : pt(x, y)
    , next_on_hull(0)
    {
    }
    chiamo la funzioni pt(x,y) e il puntatore indicizzato a zero next_on_hull?
  • Re: Problema lettura operatore logico

    NO. Non chiami nessuno. Sono i COSTRUTTORI di una classe/struttura. Non ritorna void perche il costruttore non ritorna niente.

    http://www.cprogramming.com/tutorial/constructor_destructor_ordering.html
Devi accedere o registrarti per scrivere nel forum
5 risposte