2010-10-03 23 views
6

tengo esas dos clasesconstructor de copia de base y clases derivadas

///////////BASE CLASS 

    class Base{ 
    public: 
    Base(int = 0); 
    ~Base(); 
    Base(Base&); 
    Base(Derived&); ////<-may be problem here?, note: I tried without this function 
    int valueOfBase(); 
    protected: 
    int protectedData; 
    private: 
    int baseData; 
    }; 

    /////////////DERIVED CLASS 
    class Derived: public Base{ 
    public: 
    Derived(int); 
    //Derived(Derived&); 
    ~Derived(); 
    private: 
    int derivedData; 
    }; 

and here my main 

    int main(){ 
    Base base(1); 
    Derived derived = base; 
    return 0; 
    } 

leí que si mi clase derivada no tiene copia c'tor copy c'tor of the base will be called pero cada vez que reciba conversion from Base to non-scalar type Derived requested quién está equivocado? mi compilador o mi libro, o simplemente he entendido mal? gracias de antemano

+5

Probablemente haya leído mal (el constructor de copia generado por el compilador para Derived * también * copia la parte Base del objeto, utilizando el constructor de copia de Base). - Usar el constructor de copia del padre * en lugar * no tiene sentido: eso significaría * por defecto * los objetos se cortarán en la copia. – UncleBens

Respuesta

3

Sólo una pista.

¿El siguiente código muestra el mismo error?

class base{}; 
class derived: public base{}; 

int main() 
{ 
     derived d= base(); 
} 

Sí? ¿Por qué? Porque no hay conversión de la clase base a la clase derivada. Debe definir esta conversión si desea compilar su código.

¿Qué le parece agregar esto a la clase derivada?

derived(const base &b){} 

Hace sentido, ¿eh?

+0

gracias por su respuesta, pero lo sé, al final escribí mi pregunta, leí en mi libro esta regla, la implementé, pero parece que no funciona, ¿es posible hacerlo sin derivada? (Base de const & b) {}? – rookie

+3

Lea el comentario de @UncleBens a su pregunta. –

Cuestiones relacionadas