分けてる

// innerA.h (内部LIB)
class A
{
int b;
public:
A() { /* うんぬんかんぬん */ }
virtual ~A(){ /* うんぬんかんぬん */ }

void Set(int val)
{
b = val;
}

virtual void Override() = 0;
};

// outA.h (公開)
class A
{
public:
A();
virtual ~A();
void Set(int val);
virtual void Override() = 0;
};

で、これを継承してvoid Set(int val)を実行 → ヒープ爆破

実は本格的なLIB作成経験あまりなし