1.问题
C++三种访问权限和三种继承方式?
2.解析
2.1 访问限定符
C++ 通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限(也称为可见性),分别表示:公有的、受保护的、私有的。
class Base {
public:
// 公有成员
protected:
// 受保护成员
private:
// 私有成员
}
- 公共权限 public
成员:类内可以访问,类外可以访问
任何一种继承,子类可以访问父类的公共成员、 - 保护权限 protected
成员:类内可以访问,类外不可以访问
任何一种继承,子类可以访问父类的保护成员 - 私有权限 private
成员:类内可以访问,类外不可以访问。
任何一种继承,子类不可以访问父类的私有成员
可通过如下例子说明:
#include <iostream>
#include <String>
using namespace std;
// 基类
class Student
{
public:
string name;
protected:
int age;
private:
char sex;
public:
void showStu()
{
cout << this->name << endl; // 1、在本类能够访问类的公有数据成员
cout << this->age << endl; // 1、在本类能够访问类的保护数据成员
cout << this->sex << endl; // 1、在本类能够访问类的私有数据成员
}
};
// 派生类 - public继承
class PublicSub : public Student
{
public:
void show()
{
cout << this->name << endl; // 2、public继承,在派生类中能够访问基类的公有数据成员
cout << this->age << endl; // 2、public继承,在派生类中能够访问基类的保护数据成员
//cout << this->sex << endl; // error:2、在c类中不能访问基类的私有数据成员
}
};
// 派生类 - protected继承
class ProtectedSub : protected Student
{
public:
void show()
{
cout << this->name << endl; // 3、protected继承,在派生类中能够访问基类的公有数据成员
cout << this->age << endl; // 3、protected继承,在派生类中能够访问基类的保护数据成员
//cout << this->sex << endl; // error:3、在派生类中不能访问基类的私有数据成员
}
};
// 派生类 - private继承
class PrivateSub : private Student
{
public:
void show()
{
cout << this->name << endl; // 4、private继承,在派生类中能够访问基类的公有数据成员
cout << this->age << endl; // 4、private继承,在派生类中能够访问基类的保护数据成员 【即使是private继承】
//cout << this->sex << endl; // error:4、在派生类中不能访问基类的私有数据成员
}
};
int main()
{
Student stu;
cout << stu.name << endl; // 5、在类外可以访问类的公有数据成员
//cout << stu.age << endl; // error,5、在类外不能访问类的保护数据成员
//cout << stu.sex << endl; // error,5、在类外不能访问类的私有数据成员
return 0;
}
2.2 类成员访问权限(三种访问权限)
由上面的2.1限定符的描述能够总结以下表格:
访问权限 | public | protected | private |
---|---|---|---|
对本类 | 可见 | 可见 | 可见 |
对子类 | 可见 | 可见 | 不可见 |
对外部(调用方) | 可见 | 不可见 | 不可见 |
2.3 三种继承方式
由2.1访问限定符可总结如下:
2.4 总结
public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问。
欢迎关注我的公众号“刘望”,原创技术文章第一时间推送。