[C++]Classe derivata con operatore di un membro privato

di Anonimizzato13649 il
2 risposte
Buongiorno a tutti.
Sto avendo alcuni problemi sulla creazione di un operatore di una classe derivata che prenda in riferimento un attributo privato della classe base.
Ho trovato una soluzione ed è stata quella di sostituire "private:" con "protected:" e pare che funzioni.
Ma se volessi lasciare il privato?
Questa è la classe base:

class scarpa{
private:
	int id_scarpa;
	string produttore;
	int taglia;
	int prezzo;
public:
	void set_scarpa(int,string,int,int);
	int get_id();
	string get_prod();
	int get_tg();
	int get_p();
	scarpa(){};
	~scarpa(){};
};
Questa è la classe derivata:

class scarpa_donna:public scarpa{
private:
	int altezza_tacco;
public:
	void set_scarpa_donna(int,string,int,int,int);
	int get_h();
	void operator+(int);
	scarpa_donna(){};
	~scarpa_donna(){};
};
Notate nella classe derivata come abbia già dichiarato l'operatore + che deve considerare il prezzo presente nella classe base:

void scarpa_donna::operator+(int perc){
	prezzo=prezzo+(prezzo*perc)/100;
}
Spero in un vostro aiuto.
Grazie in anticipo.

2 Risposte

  • La definizione del operatore + è sbagliata.
    Giusto
    
    scarpa_donna& scarpa_donna::operator+=(const scarpa_donna &rhs) {
        //Effettua incremento
    
        return *this;
      }
    
    const scarpa_donna scarpa_donna::operator+(const scarpa_donna &other) const {
        return scarpa_donna(*this) += other;
      }
    Quello che hai fatto non è l'overload dell'operatore +. E' semplicemente una funzione di rincaro.
  • Comunque con private non puoi farlo proprio perché private limita la visibilità alla sola classe di appartenenza, mentre protected la estende anche alle figlie.

    ciao
Devi accedere o registrarti per scrivere nel forum
2 risposte