根据访问权限可分为public、protected、private
1.共有继承
#inlcude <iostream>
using namespace std;
class A{
public:
int a;
A(){
a = 1;
}
cout << a << endl; // 正确,类内可以访问public
cout << aa << endl; // 正确,类内可以访问protected
cout << aaa << endl; // 正确,类内可以访问private
protected:
int aa = 2;
private:
int aaa = 3;
}
class B : public A{
public:
int b;
B(){
A();
b = 1;
}
cout << b << endl; //正确
cout << a << endl; //正确,基类的public在派生类中仍是public,可以访问
cout << aa << endl; //正确,基类的protected在派生类中仍是protected,可以访问
couy << aaa << endl; //错误,基类的private,不能被派生类访问
protected:
int bb = 2;
}
int mian() {
B b();
cout << b.b << endl; //正确,public,可以被类对象访问
cout << b.bb << endl; //错误,protected,不可以被类对象访问,private同理
cout << b.a << endl; //正确,public,可以被类对象访问
cout << b.aa << endl; //错误,protected,不可以被类对象访问
cout << b.aaa << endl; //错误,private,不可以被类对象访问
return 0;
}
结论:共有继承中,在派生类中,能访问基类的public、protected成员,不能访问private成员;
在派生类外,即通过类对象只能访问public成员。
2.保护继承
#inlcude <iostream>
using namespace std;
class A{
public:
int a;
A(){
a = 1;
}
cout << a << endl; // 正确,类内可以访问public
cout << aa << endl; // 正确,类内可以访问protected
cout << aaa << endl; // 正确,类内可以访问private
protected:
int aa = 2;
private:
int aaa = 3;
}
class B : protected A{
public:
int b;
B(){
A();
b = 1;
}
cout << b << endl; //正确
cout << a << endl; //正确,基类的public在派生类中变成protected,可以访问
cout << aa << endl; //正确,基类的protected在派生类中仍是protected,可以访问
couy << aaa << endl; //错误,基类的private,不能被派生类访问
protected:
int bb = 2;
}
int mian() {
B b();
cout << b.b << endl; //正确,public,可以被类对象访问
cout << b.bb << endl; //错误,protected,不可以被类对象访问,private同理
cout << b.a << endl; //错误,protected,不可以被类对象访问
cout << b.aa << endl; //错误,protected,不可以被类对象访问
cout << b.aaa << endl; //错误,private,不可以被类对象访问
return 0;
}
结论:保护继承中,在派生类中,能访问基类的public(在派生类中变为protected)、protected成员,不能访问private成员;
在派生类外,即通过类对象只能访问public成员,基类的成员都不能被访问。
tips:继承时,访问权限会发生变化,由低到高;
3.私有继承
#inlcude <iostream>
using namespace std;
class A{
public:
int a;
A(){
a = 1;
}
cout << a << endl; // 正确,类内可以访问public
cout << aa << endl; // 正确,类内可以访问protected
cout << aaa << endl; // 正确,类内可以访问private
protected:
int aa = 2;
private:
int aaa = 3;
}
class B : private A{
public:
int b;
B(){
A();
b = 1;
}
cout << b << endl; //正确
cout << a << endl; //正确,基类的public在派生类中变成private,可以访问
cout << aa << endl; //正确,基类的protected在派生类中变成private,可以访问
couy << aaa << endl; //错误,基类的private,不能被派生类访问
protected:
int bb = 2;
}
int mian() {
B b();
cout << b.b << endl; //正确,public,可以被类对象访问
cout << b.bb << endl; //错误,protected,不可以被类对象访问,private同理
cout << b.a << endl; //错误,private,不可以被类对象访问
cout << b.aa << endl; //错误,private,不可以被类对象访问
cout << b.aaa << endl; //错误,private,不可以被类对象访问
return 0;
}
结论:私有继承中,在派生类中,能访问基类的public(在派生类中变为private)、protected成员(派生类中变成private),不能访问private成员;
在派生类外,即通过类对象只能访问public成员,基类的成员都不能被访问。