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:
};
还没有评论,来说两句吧...