J
Jan Boehme
Hi!
Can anyone tell me why the output of this program is in both cases "from
A!" an not "from B!" or "from C!" ?
Thanks a lot for helping me,
Jan.
//CODE///////////////////////////////////////////////////////
#include <iostream>
using namespace std;
class AImpl;
class A
{
public:
A();
virtual ~A();
const char * GetAddress();
private:
AImpl *pImpl;
};
class BImpl;
class B : public A
{
public:
B();
virtual ~B();
private:
BImpl *pImpl;
};
class CImpl;
class C : public A
{
public:
C();
virtual ~C();
private:
CImpl *pImpl;
};
class AImpl
{
public:
char a[2000];
AImpl()
{
strcpy(a, "from A!");
};
~AImpl(){};
const char * GetAddress()
{
return a;
}
};
class BImpl : public AImpl
{
public:
BImpl()
{
strcpy(a, "from B!");
};
~BImpl(){};
};
class CImpl : public AImpl
{
public:
CImpl()
{
strcpy(a, "from C!");
};
~CImpl(){};
};
A::A()
{
pImpl = new AImpl();
}
const char * A::GetAddress()
{
return pImpl->GetAddress();
}
B::B()
{
pImpl = new BImpl();
}
C::C()
{
pImpl = new CImpl();
}
A::~A()
{
delete pImpl;
}
B::~B()
{
delete pImpl;
}
C::~C()
{
delete pImpl;
}
int main(int argc, char* argv[])
{
B m_xyz;
cout << m_xyz.GetAddress() << endl;
C m_uvw;
cout << m_xyz.GetAddress() << endl;
return 0;
}
Can anyone tell me why the output of this program is in both cases "from
A!" an not "from B!" or "from C!" ?
Thanks a lot for helping me,
Jan.
//CODE///////////////////////////////////////////////////////
#include <iostream>
using namespace std;
class AImpl;
class A
{
public:
A();
virtual ~A();
const char * GetAddress();
private:
AImpl *pImpl;
};
class BImpl;
class B : public A
{
public:
B();
virtual ~B();
private:
BImpl *pImpl;
};
class CImpl;
class C : public A
{
public:
C();
virtual ~C();
private:
CImpl *pImpl;
};
class AImpl
{
public:
char a[2000];
AImpl()
{
strcpy(a, "from A!");
};
~AImpl(){};
const char * GetAddress()
{
return a;
}
};
class BImpl : public AImpl
{
public:
BImpl()
{
strcpy(a, "from B!");
};
~BImpl(){};
};
class CImpl : public AImpl
{
public:
CImpl()
{
strcpy(a, "from C!");
};
~CImpl(){};
};
A::A()
{
pImpl = new AImpl();
}
const char * A::GetAddress()
{
return pImpl->GetAddress();
}
B::B()
{
pImpl = new BImpl();
}
C::C()
{
pImpl = new CImpl();
}
A::~A()
{
delete pImpl;
}
B::~B()
{
delete pImpl;
}
C::~C()
{
delete pImpl;
}
int main(int argc, char* argv[])
{
B m_xyz;
cout << m_xyz.GetAddress() << endl;
C m_uvw;
cout << m_xyz.GetAddress() << endl;
return 0;
}