一、复习三种访问控制符
public:修饰的成员变量或者方法,可以在类的外部或者类的内部使用
private:修饰的成员变量或者方法,只能在类的内部使用,外部不能使用
protected:修饰的成员变量或者方法,只能在类的内部或者子类内部使用,不能在类的外部使用
这三种访问控制符可以修饰类的成员属性,同时在继承的时候也能够修饰其继承的方式
二、类的继承
通过继承联系在一起的类构成一种层次关系,通常在层次关系的根部有一个基类,其他类则是直接或者间接地从基类继承过来。
我们先来看一个继承的例子
class A
{
public:
int a;
private:
int b;
protected:
int c;
public:
void print();
};
class B : public A
{
public:
void printB();
};
从上面的例子我们可以看到A类里面有三个成员变量a,b, c,分别是public, private, protected的,还有一个public的成员函数。B类继承A类的方式是public的。
通过一些继承方式我们就可以在派生类中访问基类中成员。但是并不是所有的继承方式都是可以访问的,是否能够访问是由基类的访问控制符和继承方式决定的。
三、三种继承方式的区别
我先将他们三者的区别用一个表格表示出来
|
| 原有的访问属性 | ||
继 承 方 式 |
| public | private | protected |
public | public | private | protected | |
private | private | private | private | |
protected | protected | private | protected |
1、通过public方式继承的,原有的访问属性保持不变
①如果原有的访问属性是public ,那么我们就可以在类的内部或者外部访问基类的public成员
②如果原有的访问属性是private,那么我们将不能访问基类的private成员
③如果原有的访问属性是protected,那么我们可以在派生类的内部访问基类的protected成员,但是不能在类的外部访问它。
2、通过private方式继承的,所有的属性都变成了private。
①如果原有的访问属性是public ,那么我们可以在派生类的内部访问,但是不能再派生类的外部访问基类的成员
②如果原有的访问属性是private, 那么我们将不能访问基类的private成员。
③如果原有的访问属性是protected,那么我们可以在派生类的内部访问基类的protected成员,但是不能在类的外部访问它。
3、通过protected方式继承的,原理来的public变成了protected,private和protected都保持不变
①如果原有的访问属性是public ,那么我们可以在派生类的内部访问基类的public成员,但是不能在类的外部访问它
②如果原有的访问属性是private,那么我们将不能访问基类的private成员。
③如果原有的访问属性是protected,那么我们可以在派生类的内部访问基类的protected成员,但是不能在类的外部访问它。
【注意】以上说的访问都是直接访问。
如果有错误,大家可以在评论里指出来。