Create an instance of a derived class from an instance of the base class without knowing the members of the class

Is this scenario possible?

class Base
{
  int someBaseMemer;
};

template<class T>
class Derived : public T
{
  int someNonBaseMemer;

  Derived(T* baseInstance);
};

Purpose:

Base* pBase = new Base();
pBase->someBaseMemer = 123; // Some value set
Derived<Base>* pDerived = new Derived<Base>(pBase);

The value of pDerived-> someBaseMemer should be equal to pBase-> someBaseMember and similarly with other basic elements.

+5
source share
3 answers

Why don't you finish writing and compiling the code?

class Base 
{ 
public: // add this
    int someBaseMemer; 
}; 

template<class T> 
class Derived : public T 
{ 
public: // add this
    int someNonBaseMemer; 

    Derived(T* baseInstance)
        : T(*baseInstance) // add this
    { return; } // add this
}; 

It compiles and runs as you indicated.

EDIT: Or do you mean that someNonBaseMemershould equal someBaseMemer?

+3
source

? , . :

class Base
{
  public:
    Base(int x) : someBaseMemer(x) {}
  protected:      // at least, otherwise, derived can't access this member
    int someBaseMemer;
};

template<class T>
class Derived : public T
{
  int someNonBaseMemer;

  public:
  Derived(int x, int y) : someNonBaseMemer(y), T(x) {}
};

Derived<Base> d(42, 32); // usage

.

+4

someBaseMemr class struct:

class Base
{
  public:
  int someBaseMemer;
};

OR

struct Base
{
  int someBaseMemr;
};

, class private . A struct public .

, public Base.

+1

All Articles