C++:public、protected、private詳解
阿新 • • 發佈:2018-12-10
class BaseClass { public: void PubGetVal() {} int pub_val; protected: void ProGetVal() {} int pro_val; private: void PriGetVal() {} int pri_val; }; class PubSubClass : public BaseClass { public: void TestValue() { pub_val = 0; pro_val = 0; pri_val = 0; //ERROR // 子類無法訪問基類的私有變數 } void TestFunction() { PubGetVal(); ProGetVal(); PriGetVal(); //ERROR // 子類無法訪問基類的私有函式 } }; class ProSubClass : protected BaseClass { public: void TestValue() { pub_val = 0; pro_val = 0; pri_val = 0; //ERROR } void TestFunction() { PubGetVal(); ProGetVal(); PriGetVal(); //ERROR } }; class PriSubClass : private BaseClass { public: void TestValue() { pub_val = 0; pro_val = 0; pri_val = 0; //ERROR } void TestFunction() { PubGetVal(); ProGetVal(); PriGetVal(); //ERROR } }; int main() { BaseClass *BC = new BaseClass(); BC->pub_val = 0; BC->pro_val = 0; //ERROR // 基類的物件例項無法訪問基類的保護變數 BC->pri_val = 0; //ERROR // 基類的物件例項無法訪問基類的私有變數 BC->PubGetVal(); BC->ProGetVal(); //ERROR // 基類的物件例項無法訪問基類的保護函式 BC->PriGetVal(); //ERROR // 基類的物件例項無法訪問基類的私有函式 //---------------------------------------------- PubSubClass *PubSC = new PubSubClass(); PubSC->pub_val = 0; PubSC->pro_val = 0; //ERROR PubSC->pri_val = 0; //ERROR PubSC->PubGetVal(); PubSC->ProGetVal(); //ERROR PubSC->PriGetVal(); //ERROR //---------------------------------------------- ProSubClass *ProSC = new ProSubClass(); ProSC->pub_val = 0; //ERROR // 子類使用protected繼承父類後,public變數變成protected變數 ProSC->pro_val = 0; //ERROR ProSC->pri_val = 0; //ERROR ProSC->PubGetVal(); //ERROR // 子類使用protected繼承父類後,public函式變成protected函式 ProSC->ProGetVal(); //ERROR ProSC->PriGetVal(); //ERROR //---------------------------------------------- PriSubClass *PriSC = new PriSubClass(); PriSC->pub_val = 0; //ERROR // 子類使用private繼承父類後,public變數變成private變數 PriSC->pro_val = 0; //ERROR PriSC->pri_val = 0; //ERROR PriSC->PubGetVal(); //ERROR // 子類使用private繼承父類後,public函式變成private函式 PriSC->ProGetVal(); //ERROR PriSC->PriGetVal(); //ERROR //---------------------------------------------- system("pause"); return 0; }