#include <iostream>
using namespace std;
using type_t = int;
type_t test = 777;
class Base {
public:
Base() : cA(A_var) { A_var = test++; }
void demo() { f(); cout << "base:"<<A_var<<endl; A_var++;}
protected:
const type_t& cA;
private:
type_t A_var;
void f();
};
class Derived : public Base{
public:
void g();
void demo() { g(); cout << "derived:"<<cA<<endl; }
};
//access in Base class
void Base::f() {
type_t value = A_var;
A_var = value;
}
//access in Derived class
void Derived::g() {
type_t value = cA;
//cA = value; //Error, const reference; good
}
class OldBase {
public:
OldBase() { A_var = test++; }
void demo() { f(); cout << "base:"<<A_var<<endl; A_var++;}
private:
type_t A_var;
void f();
};
int main() {
cout << sizeof (Base)<<endl;
cout << sizeof (OldBase)<<endl;
Base b;
Derived d;
b.demo();
d.demo();
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdXNpbmcgdHlwZV90ID0gaW50OyAKdHlwZV90IHRlc3QgPSA3Nzc7IAoKY2xhc3MgQmFzZSB7CnB1YmxpYzogCglCYXNlKCkgOiBjQShBX3ZhcikgeyBBX3ZhciA9IHRlc3QrKzsgfQoJdm9pZCBkZW1vKCkgeyBmKCk7IGNvdXQgPDwgImJhc2U6Ijw8QV92YXI8PGVuZGw7ICBBX3ZhcisrO30KcHJvdGVjdGVkOgogICAgY29uc3QgdHlwZV90JiBjQTsKcHJpdmF0ZToKICAgIHR5cGVfdCBBX3ZhcjsKICAgIHZvaWQgZigpOwp9OwoKY2xhc3MgRGVyaXZlZCA6IHB1YmxpYyBCYXNlewpwdWJsaWM6CiAgICB2b2lkIGcoKTsKCXZvaWQgZGVtbygpIHsgZygpOyBjb3V0IDw8ICJkZXJpdmVkOiI8PGNBPDxlbmRsOyB9Cn07CgovL2FjY2VzcyBpbiBCYXNlIGNsYXNzCnZvaWQgQmFzZTo6ZigpIHsKICAgIHR5cGVfdCB2YWx1ZSA9IEFfdmFyOwogICAgQV92YXIgPSB2YWx1ZTsKfQoKLy9hY2Nlc3MgaW4gRGVyaXZlZCBjbGFzcwp2b2lkIERlcml2ZWQ6OmcoKSB7CiAgICB0eXBlX3QgdmFsdWUgPSBjQTsKICAgIC8vY0EgPSB2YWx1ZTsgLy9FcnJvciwgY29uc3QgcmVmZXJlbmNlOyBnb29kCn0KCmNsYXNzIE9sZEJhc2UgewpwdWJsaWM6IAoJT2xkQmFzZSgpIHsgQV92YXIgPSB0ZXN0Kys7IH0KCXZvaWQgZGVtbygpIHsgZigpOyBjb3V0IDw8ICJiYXNlOiI8PEFfdmFyPDxlbmRsOyAgQV92YXIrKzt9CnByaXZhdGU6CiAgICB0eXBlX3QgQV92YXI7CiAgICB2b2lkIGYoKTsKfTsKCmludCBtYWluKCkgewoJY291dCA8PCBzaXplb2YgKEJhc2UpPDxlbmRsOyAKCWNvdXQgPDwgc2l6ZW9mIChPbGRCYXNlKTw8ZW5kbDsgCglCYXNlIGI7IAoJRGVyaXZlZCBkOyAKCWIuZGVtbygpOyAKCWQuZGVtbygpOyAKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJldHVybiAwOwp9