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