C++ 继承,private 以及 protected

来源:互联网 发布:山寨苹果数据线 知乎 编辑:程序博客网 时间:2024/05/19 20:22
class CA{public:protected:private:int nID;//声明为private};class CB:public CA{public:CB(){nID=0;//第二层不能访问了}protected:private:};


class CA{public:protected:int nID;//声明为protectedprivate:};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;//声明为protectedprotected: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;//声明为protectedprotected: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;//声明为protectedprivate:};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:};


阅读全文
0 0
原创粉丝点击