1. 程式人生 > >C++:public、protected、private詳解

C++:public、protected、private詳解

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;
}