继承说明
1、子类拥有父类的所有成员变量和成员函数
2、子类就是一种特殊的父类
3、子类对象可以当作父类对象使用
4、子类可以拥有父类没有的方法和属性
派生类的访问控制
派生类继承了基类的全部成员变量和成员方法(除了构造和析构之外的成员方法),但是这些成员的访问属性,在派生过程中是可以调整的
不同继承方式会改变继承成员的访问属性
1)C++中继承方式会影响子类的对外访问的属性
public继承:父类成员在子类中保持原有的访问级别
private继承:父类成员在子类中变为private成员
protected:父类中public成员变为protected
父类中protected成员依然为protected
父类中private成员依然为private
2)private成员在子类中依然存在,但是却无法访问。不论何种方式继承基类,派生类都不能直接使用父类中的私有成员
#include<iostream>
using namespace std;
class test
{
public:
int a;
protected:
int b;
private:
int c;
};
/*C++中的继承方式(public,private,protected)会影响子类的对外访问属性
判断某一句话,能否被访问
1)看调用语句,这句话写在子类的内部,外部
2)看子类如何从父类继承(public,private,protected)
3)看父类中的访级别(public,private,protected)*/
class child :public test
{
public:
void changedata()
{
a = 10;//ok
b = 10;//ok
//c = 10;//error
}
};
//protected关键字修饰的成员变量和成员函数,是为了在家族中使用 为了继承
class child1 :protected test
{
public:
void changedata()
{
a = 10;//ok
b = 10;//ok
//c = 10;//error
}
};
class child2 :private test
{
public:
void changedata()
{
a = 10;//ok
b = 10;//ok
//c = 10;//error
}
};
void main()
{
//派生类的继承方式为public
child c1;
c1.a = 10;//ok
//c1.b = 10;//error
//c1.c = 10;//error
//派生类的继承方式为protected
child1 c2;
//c2.a = 10;//error
//c2.b = 10;//error
//c2.c = 10;//error
//派生类的继承方式为private
child2 c3;
//c3.a = 10;//error
//c3.b = 10;//error
//c3.c = 10;//error
system("pause");
}