, , , A, , this. A, :
A() { a_instance = this; }
, B, B , A - a_instance this B, .. a_instance B.
, getInstance:
class A
{
public:
static A* getInstance() {
static A s;
return &s;
}
void virtual foo() { std::cout << "From base class" << std::endl; }
protected:
A() { }
~A() { }
A(const A&);
A& operator=(const A&);
};
B:
class B : public A
{
public:
static B* getInstance() {
static B s;
return &s;
}
void virtual foo() { std::cout << "From derived class" << std::endl; }
protected:
B() { }
~B() { }
B(const B&);
B& operator=(const B&);
};
:
int main() {
A::getInstance()->foo();
B::getInstance()->foo();
}
: