Restrizioni classi C++

mikhael
Salve a tutti.
Perché i membri di una classe non possono essere dichiarati come "auto", "extern" o "register"?
Grazie anticipatamente.

Risposte
apatriarca
Che significato hanno, secondo te, quelle parole chiave? E che significato daresti ad un membro di una funzione dichiarato in quel modo?

mikhael
Quelle parole riguardano la permanenza in memoria degli identificatori a cui si riferiscono. Una variabile dichiarata "auto" sarà creata ogni volta che si accede al blocco in cui è stata dichiarata, rimarrà in memoria finché quel blocco resta attivo e sarà distrutta quando si sarà usciti da esso. Ora le variabili membro di una classe, per esempio, non hanno un comportamento del genere in memoria? Nel senso che non sono di tipo "auto" per default?
Ipotizziamo che non lo siano. Probabilmente "extern" non lo potranno mai essere perchè in tal caso l'incapsulamento dei dati verrebbe meno in una programmazione a oggetti qual è quella in linguaggio C++. Il "register" invece può soltanto essere utilizzato per elementi con permanenza automatica nella memoria, pertanto se non sono "auto" a maggior ragione non potranno essere "register". Per esclusione verrebbe da pensare (sbagliando ovviamente) che tutti i membri definiti in una classe siano "static" per default.
Le parole chiave in sé credo siano chiare, (almeno concettualmente le ho capite). E' nel caso particolare delle classi che non capisco le restrizioni.

apatriarca
L'esistenza delle variabili membro è la stessa dell'istanza della classe a cui appartengono. Non ha quindi senso definire una permanenza diversa. Questo è il motivo per cui non si possono usare quelle parole chiave per variabili membro.

mikhael
E' chiaro. Grazie mille.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.