Class A contains a pointer to abstract class B (only headers implemented):
// A.h
#include "B.h"
class A {
   public:
   A();
   virtual ~A();
   pointBto(B* b_);   // { this.b = b_;  }
   private:
   B* b;
}
// B.h
class B {
    public:
    B();
    virtual ~B();
    virtual void b_method() = 0;
}
Classes C and D inherit B.
// C.h
#include "B.h"
Class C : public B {
    public:
    C();
    ~C();
    virtual b_method();
}
// D.h
#include "B.h"
Class D : public B {
    public:
    D();
    ~D();
    virtual b_method();
}
Application reads a string and depending on that, creates a new object of class C or D and points b to the created object.
Note: I don't want to create an endless chain of
if (string_ == "C")
{
   a_.pointBto(new C());
}
else if (string_ == "D")
{
   a_.pointBto(new D());
}
else ...
 
     
     
     
    