#include <iostream>
using namespace std;
class ParentClass {
public:
void test(ParentClass* obj);
protected:
virtual void getProtected();
private:
virtual void getPrivate();
};
class ChildClass: public ParentClass{
protected:
virtual void getProtected();
private:
virtual void getPrivate();
};
//private virtual
void ParentClass::getPrivate(){
cout << "ParentClass private";
}
//protected virtual
void ParentClass::getProtected(){
cout << "ParentClass protected";
}
//public
void ParentClass::test(ParentClass* obj) {
obj->getProtected();
obj->getPrivate();
};
//private virtual
void ChildClass::getPrivate(){
cout << "ChildClass private";
}
//protected virtual
void ChildClass::getProtected(){
cout << "ChildClass protected";
}
int main() {
cout << "test";
(new ParentClass)->test(new ChildClass);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUGFyZW50Q2xhc3MgewogICAgcHVibGljOgogICAgICAgIHZvaWQgdGVzdChQYXJlbnRDbGFzcyogb2JqKTsKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvdGVjdGVkKCk7CiAgICBwcml2YXRlOiAKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJpdmF0ZSgpOwp9OwoKY2xhc3MgQ2hpbGRDbGFzczogcHVibGljIFBhcmVudENsYXNzewogICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcm90ZWN0ZWQoKTsKICAgIHByaXZhdGU6IAogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcml2YXRlKCk7Cn07CgoKLy9wcml2YXRlIHZpcnR1YWwgCnZvaWQgUGFyZW50Q2xhc3M6OmdldFByaXZhdGUoKXsKICAgIGNvdXQgPDwgIlBhcmVudENsYXNzIHByaXZhdGUiOwp9Ci8vcHJvdGVjdGVkIHZpcnR1YWwgCnZvaWQgUGFyZW50Q2xhc3M6OmdldFByb3RlY3RlZCgpewogICAgY291dCA8PCAiUGFyZW50Q2xhc3MgcHJvdGVjdGVkIjsKfQovL3B1YmxpYyAgCnZvaWQgUGFyZW50Q2xhc3M6OnRlc3QoUGFyZW50Q2xhc3MqIG9iaikgewogICAgb2JqLT5nZXRQcm90ZWN0ZWQoKTsKICAgIG9iai0+Z2V0UHJpdmF0ZSgpOwp9OwoKLy9wcml2YXRlIHZpcnR1YWwgCnZvaWQgQ2hpbGRDbGFzczo6Z2V0UHJpdmF0ZSgpewogICAgY291dCA8PCAiQ2hpbGRDbGFzcyBwcml2YXRlIjsKfQovL3Byb3RlY3RlZCB2aXJ0dWFsIAp2b2lkIENoaWxkQ2xhc3M6OmdldFByb3RlY3RlZCgpewogICAgY291dCA8PCAiQ2hpbGRDbGFzcyBwcm90ZWN0ZWQiOwp9CgoKaW50IG1haW4oKSB7Cgljb3V0IDw8ICJ0ZXN0IjsKCShuZXcgUGFyZW50Q2xhc3MpLT50ZXN0KG5ldyBDaGlsZENsYXNzKTsKfQ==