#include using namespace std; class BaseT{ public: int publicVar{10}; void PublicFunction() { cout << " privateVar = " << privateVar << endl; cout << " protectedVar = " << protectedVar << endl; cout << " publicVar = " << publicVar << endl; } virtual void Access() { PublicFunction(); ProtectedFunction(4); PrivateFunction(); publicVar = 10; protectedVar = 20; privateVar = 30; } protected: void ProtectedFunction(int i) { protectedVar = i; } int protectedVar{2}; private: void PrivateFunction() { privateVar *= 2; } int privateVar{1}; }; class PublicT: public BaseT { public: void Access() { PublicFunction(); ProtectedFunction(4); //PrivateFunction(); publicVar = 10; protectedVar = 20; //privateVar = 30; }; }; class ProtectedT: protected BaseT { public: void Access() { PublicFunction(); ProtectedFunction(4); //PrivateFunction(); publicVar = 10; protectedVar = 20; //privateVar = 30; }; }; class ProtChild: public ProtectedT { public: void Access() { PublicFunction(); ProtectedFunction(4); //PrivateFunction(); publicVar = 10; protectedVar = 20; //privateVar = 30; } }; class PrivateT: private BaseT { public: void Access() { PublicFunction(); ProtectedFunction(4); //PrivateFunction(); publicVar = 10; protectedVar = 20; //privateVar = 30; }; }; class PrivChild: public PrivateT { public: void Access() { //PublicFunction(); //ProtectedFunction(4); //PrivateFunction(); //publicVar = 10; //protectedVar = 20; //privateVar = 30; } }; int main() { BaseT base; PublicT pub; ProtectedT prot; PrivateT priv; cout << "base " << endl; base.Access(); //base.ProtectedFunction(); cout << endl; cout << "public " << endl; pub.Access(); pub.PublicFunction(); //pub.ProtectedFunction(3); //pub.PrivateFunction(); cout << pub.publicVar << endl; //cout << pub.protectedVar << endl; //cout << pub.privateVar << endl; cout << endl; cout << "protected " << endl; prot.Access(); //prot.PublicFunction(); //prot.ProtectedFunction(3); //prot.PrivateFunction(); //cout << prot.publicVar << endl; //cout << prot.protectedVar << endl; //cout << prot.privateVar << endl; cout << endl; cout << "private " << endl; priv.Access(); //priv.PublicFunction(); //priv.ProtectedFunction(3); //priv.PrivateFunction(); //cout << priv.publicVar << endl; //cout << priv.protectedVar << endl; //cout << priv.privateVar << endl; cout << endl; return 0; }