#include <iostream>
#include <string>
using namespace std;
class B
{
public:
B(): b_string_("") {};
virtual ~B() {}
virtual std::string getString() const { return b_string_; }
virtual void setString(const std::string& value) { b_string_ = value; }
private:
std::string b_string_;
};
class B_null : public B
{
public:
virtual std::string getString() const { return ""; }
};
B_null null_b;
class A
{
public:
A(B* b = NULL) { if (b == NULL) b_ = &null_b; else b_ = b; }
void print() { cout << "b_->getString(): \"" << b_->getString() << "\"" << endl; }
private:
B *b_;
};
int main()
{
A a1;
a1.print();
B b;
b.setString("blah");
A a2(&b);
a2.print();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQgp7CnB1YmxpYzoKICAgIEIoKTogYl9zdHJpbmdfKCIiKSB7fTsKICAgIHZpcnR1YWwgfkIoKSB7fQogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBiX3N0cmluZ187IH0KICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSB7IGJfc3RyaW5nXyA9IHZhbHVlOyB9CnByaXZhdGU6ICAgIAogICAgc3RkOjpzdHJpbmcgYl9zdHJpbmdfOwp9OwoKY2xhc3MgQl9udWxsIDogcHVibGljIEIKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuICIiOyB9Cn07CgpCX251bGwgbnVsbF9iOwoKY2xhc3MgQQp7CnB1YmxpYzoKICAgIEEoQiogYiA9IE5VTEwpIHsgaWYgKGIgPT0gTlVMTCkgYl8gPSAmbnVsbF9iOyBlbHNlIGJfID0gYjsgfQogICAgdm9pZCBwcmludCgpIHsgY291dCA8PCAiYl8tPmdldFN0cmluZygpOiBcIiIgPDwgYl8tPmdldFN0cmluZygpIDw8ICJcIiIgPDwgZW5kbDsgfQpwcml2YXRlOgogICAgQiAqYl87Cn07ICAgICAgICAKCgppbnQgbWFpbigpCnsKICAgIEEgYTE7CiAgICBhMS5wcmludCgpOwogICAgCiAgICBCIGI7CiAgICBiLnNldFN0cmluZygiYmxhaCIpOwogICAgQSBhMigmYik7CiAgICBhMi5wcmludCgpOwp9