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

di il
2 risposte

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

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

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

    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.
  • Re: [C++]Classe derivata con operatore di un membro privato

    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