C++ 繼承,private 以及 protected

class CA
{
public:
protected:
	
private:
	int nID;//聲明爲private
};
class CB:public CA
{
public:
	CB(){
		nID=0;//第二層不能訪問了
	}
protected:
private:

};


class CA
{
public:
protected:
	int nID;//聲明爲protected
private:
	
};
class CB:public CA
{
public:
	CB(){
		nID=0;//第二層可以訪問
	}
protected:
private:

};
class CC:public CB
{
public:
	CC(){
		nID=0;//第二層可以訪問
	}
protected:
private:
};

//有一個場景,需要將nID變更爲2,那麼我們可以通過前置基父類繼承,也可以使用後繼子類繼承
//下面是前置父類繼承
/*優點
1.CB類可以保持原來代碼不動,只需要更新CA_A的代碼即可
2.如果還有其他類需要此變更可以直接繼承CA_A的類
*/
class CA
{
public:
	volatile int nID;//聲明爲protected
protected:
	virtual int Test()=0;
private:
	
};
class CA_A:public CA
{
public:
protected:
	virtual int Test(){
		nID=1;
	}
private:
};
class CB:public CA_A
{
public:
	CB(){
		nID=0;//第二層可以訪問
	}
	
protected:

private:

};

//下面是後置子類繼承
/*優點
1.CB類可以保持原來代碼不動,只需要更新CC的代碼即可
2.需要覈查原先的代碼是否需要新功能需求,如果原先都得使用新功能需求則CB的調用全都改成CC調用
3.可以獨立封裝使用,原先CB的類的使用可以保持不動,新增加功能可以使用CC即可
*/
class CA
{
public:
	volatile int nID;//聲明爲protected
protected:
	virtual int Test()=0;
private:
	
};

class CB:public CA
{
public:
	CB(){
		nID=0;//第二層可以訪問
	}
	virtual int Test(){
		nID=2;//原先實現的是等於2,後面需要改成1,假設不動這裏的代碼
	}
protected:

private:

};


class CC:public CB
{
public:
	CC(){
		nID=0;//第二層可以訪問
	}
	virtual int Test(){
		nID=1;//通過繼承CB,然後實現Test的功能即可,使用時有這種新特殊需求構造CC的對象出來即可
	}
protected:

private:

};

//C++ 繼承構造函數

class CA
{
public:
	CA(){

	}
	CA(IN int n):nID(n)
	{

	}
protected:
	volatile int nID;//聲明爲protected
private:
	
};

class CB:public CA
{
public:
	CB()
	{//1.無疑這個構造函數肯定是調用CA()構造函數
		nID=0;//第二層可以訪問
	}
	CB(IN int n)
	//CB(IN int n):CA(n) //這裏纔是想要的
	{//2.但是這個構造函數是調用CA()還是CA(IN int n)構造函數呢?答案是:CA(),VS2010,所以如果要顯示調用對應的函數,改成註釋那一塊內容接口
		nID=n;
	}
protected:

private:

};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章