Problema con i campi protetti nella classe base in c ++
-
06-07-2019 - |
Domanda
Ho una classe base, diciamo BassClass
, con alcuni campi che li ho resi protetti e alcune funzioni virtuali pure. Quindi la classe derivata, dire DerivedClass
, come class DerivedClass: public BassClass
. DerivedClass non dovrebbe ereditare i campi protetti da BassClass? Quando ho provato a compilare DerivedClass, il compilatore si lamenta che DerivedClass NON ha nessuno di quei campi, cosa c'è di sbagliato qui?
grazie
Soluzione
Se BassClass
(sic) e DerivedClass
sono modelli e il membro BassClass
a cui si desidera accedere da DerivedClass
non è specificato come nome dipendente, non sarà visibile.
per es.
template <typename T> class BaseClass {
protected:
int value;
};
template <typename T> class DerivedClass : public BaseClass<T> {
public:
int get_value() {return value;} // ERROR: value is not a dependent name
};
Per ottenere l'accesso è necessario fornire ulteriori informazioni. Ad esempio, potresti specificare completamente il nome del membro:
int get_value() {return BaseClass<T>::value;}
O potresti rendere esplicito che ti riferisci a un membro della classe:
int get_value() {return this->value;}
Altri suggerimenti
Funziona:
#include <iostream>
struct Base {
virtual void print () const = 0;
protected:
int val;
};
struct Derived : Base {
void print () { std::cout << "Bases's val: " << val << std::endl; }
};