1、这三种权限不只是针对class的,struct的成员变量和方法也有这些权限控制(struct像class一样,也有构造函数、成员函数,也能继承,也能实现多态,最明显的区别就是默认的权限控制,struct的默认权限是public,class的默认权限是private;在继承上,struct可以继承class,同样class也可以继承struct,struct默认的继承是public继承,class默认的继承是private继承)
struct A{};
class B : A{}; //private继承
struct C : B{}; //public继承
2、继承中的权限传递
在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承,但protected和public继承是可以继续往下传递的,protected继承将基类的public成员和protected成员全部继承为protected成员,public继承则都保持原来的权限。
class A{
protected:
int a;
};
class B:private A{
public:
void show(){
cout<<this->a<<endl;//正确
}
};
class C:private B{
public:
void show(){
cout<<this->a<<endl;//错误
}
};
class A{
protected:
int a;
};
class B:protected A{
public:
void show(){
cout<<this->a<<endl;//正确
}
};
class C:protected B{
public:
void show(){
cout<<this->a<<endl;//正确
}
};
3、关于protected权限
class foo {
int a;
public:
int foobar(foo * f) {
return this->a + f->a;//合法
}
};
class foo {
protected:
int a;
};
class foobar : public foo {
public:
int bar(foo * f) {
return this->a + f->a;//这样是错误的
}
};
具体为什么这样还不明白