有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。
1.public 继承: | 基类 public 成员,protected 成员,private | 成员的访问属性在派生类中分别变成:public, protected, private |
2.protected 继承: | 基类 public 成员,protected 成员,private | 成员的访问属性在派生类中分别变成:protected, protected, private |
3.private 继承: | 基类 public 成员,protected 成员,private | 成员的访问属性在派生类中分别变成:private, private, private |
但无论哪种继承方式,上面两点都没有改变:
1.private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;
2.protected 成员可以被派生类访问。
例如 public 继承
#include<iostream>
#include<assert.h>
using namespace std;
class A {
public:
int a=1;
public:
int a1=2;
protected:
int a2=3;
private:
int a3=4;
};
class B : public A {
public:
void fun() {
cout << a << endl; //正确,public成员
cout << a1 << endl; //正确,基类的public成员,在派生类中仍是public成员。
cout << a2 << endl; //正确,基类的protected成员,在派生类中仍是protected可以被派生类访问。
//cout << a3 << endl; //错误,基类的private成员不能被派生类访问。
}
};
int main() {
B b;
cout << b.a << endl;
cout << b.a1 << endl; //正确
b.fun(); //正确
//cout << b.a2 << endl; //错误,类外不能访问protected成员
//cout << b.a3 << endl; //错误,类外不能访问private成员
system("pause");
return 0;
}