Sottoclasse al casting super-classe, C ++

0

Per curiosità. Supponi di avere una classe con un membro dati:

class Base {
 public:
   //methods and constructor,set and get, operator overload etc
 private:
  int data;
};

class Der : public Base {
  public:
    //just overload of some of the methods in the base class, please note there's no data member
}

L'idea è fondamentalmente che ho molti metodi che sono in realtà gli stessi della classe base, e sarebbero uguali per la classe derivate. Credo di poter definire un costruttore per la classe Der come

Der::Der(const Base& x) {
   this->set_data(x.data);
}

Tuttavia desidero implementare un costruttore per una classe base in cui l'argomento è una classe der. Qualcosa come

Base a = 10;
Der b = 3;
Base c = b; //Here!!!
Der d = a;

La mia domanda è se nel caso in cui sto esponendo devo implementare un costruttore, o il costruttore di copia farebbe automaticamente il lavoro per me, data la relazione tra la classe base e la classe der.

    
posta user8469759 31.01.2017 - 17:41
fonte

2 risposte

2

Funzionerà così com'è, dal meccanismo solitamente indesiderabile di slicing di oggetto .

Cioè, l'oggetto di classe derivato b è cast implicitamente a (un riferimento a) la classe base, e quindi c usa il solito costruttore di copia base-classe.

Se questo ha effettivamente senso per te (cioè non ci sono altri membri di dati che dovresti copiare dalla classe derivata), allora hai esattamente zero lavoro da fare.

    
risposta data 31.01.2017 - 17:59
fonte
0

Non riesco a vedere un modo per far passare un oggetto Der nel costruttore della classe Base, a meno che tu non voglia farlo. Ma questo inizia a rendere le cose complicate e illeggibili.

    
risposta data 31.01.2017 - 17:54
fonte

Leggi altre domande sui tag