继承
一,public protected private继承
1,public继承
父类的所有public属性,在子类中也是public。父类的protected属性,在子类中也是protected
class Base {
public:
void show_base(){}
protected:
void print_base(){}
private:
int x;
};
class D : public Base {
};
int main(){
D d;
d.show_base();//可以调用父类的show_base()
d.print_base();//不可以调用父类的print_base()
}
2,protected继承
父类的所有public属性,在子类中是protected。父类的protected属性,在子类中也是protected
class Base {
public:
void show_base(){}
protected:
void print_base(){}
private:
int x;
};
class D : protected Base {
};
int main(){
D d;
//编译不过
d.show_base();//虽然show_base是父类的public方法,但是因为是protected继承,所以父类的show_base方法,变成了子类的protected方法
}
3,private继承
父类的所有public,protected属性,在子类中都是private。
class Base {
public:
void show_base(){}
protected:
void print_base(){}
private:
int x;
};
class D : private Base {
};
int main(){
D d;
//编译不过
d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
}
4,protected继承和private继承的区别
假设class B 用private继承 class A 后,不管class C 用什么方式继承class B,class A里的public,protected属性,在class C里也是不可以访问的
class Base {
public:
void show_base(){}
protected:
void print_base(){}
private:
int x;
};
class D : protected Base {
};
class C : private D {
public:
void show_c(){
//编译通过
show_base();//因为D是用protected继承的Base,所以Base里的所有public,protected属性,在D中都是protected的。
}
};
int main(){
D d;
//编译不过
d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
}
class Base {
public:
void show_base(){}
protected:
void print_base(){}
private:
int x;
};
class D : private Base {
};
class C : private D {
public:
void show_c(){
//编译不过
show_base();//因为D是用private继承的Base,所以Base里的所有属性,在D中都是private,从而导致C不能访问Base里的任何属性。
}
};
int main(){
D d;
//编译不过
d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
}