一、继承
C++中存在着继承关系,可以想象称为世袭制,哈哈这样会更有助于帮助理解,C++中的继承和我们现实中的世袭是差不多的,C++中的继承在两个或者多个类中体现的,这里我们直说两个类的,复杂的继承我们不进行讨论。我们都知道继承不能够继承父的生和死还有他的私有,继承和我们类中声明方法和成员是类似的,也有公有继承、保护继承和私有继承三种。我们分别来看看这三种属性的继承:
(说明:父类的私有成员和方法只有父类的方法才能直接访问)
1、公有继承父的所有原属性方法和成员,子类的方法可以方问父类的公有和保护方法以及成员,子类对象可以访问父类公有成员和方法,子类对象不能直接访问其私有和保护的成员及方法。
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"this is A"<<endl;
}
~A()
{
cout<<"this is ~A"<<endl;
}
void fun()
{
cout<<"A:: fun"<<endl;
}
protected:
virtual void fun1()
{
cout<<"protected A::fun1"<<endl;
}
private:
int ar;
void fun2()
{
cout<<"private A::fun2"<<endl;
}
};
class B:public A
{
public:
B()
{cout<<"this is B"<<endl;};
~B()
{cout<<"this is ~B"<<endl;}
void fun3()
{
cout<<"B::fun3:>";
fun1();
//fun2();//父类的私有只有父类方法可以访问
}
private:
int data;
};
int main()
{
B b;
A a;
a.fun();
// a.fun1();//1
//a.fun2();//2
/////////////////////////////////
cout<<"**********************************"<<endl;
b.fun();
//b.fun1();//3
//b.fun2();//4
//b.fun3();//5
return 0;
}
运行结果:
如果放开代码中注释的1和2这两个错误我们肯定知道对象无法直接访问自己的私有和保护的成员及方法,只有通过自己的公有方法才可以,那么我们放开3、4看看会有什么错误提示:
根据错误提示来印证我们当初的猜想是正确的,子类无法直接访问父类的保护和私有成员及方法。
我们接着试着放开5看一下是否可以运行:
子类的方法是可以直接访问父类的保护方法的。
2、保护继承是把父类的公有方法及成员保护继承,在父类中的保护和公有的方法及成员都将变成保护型,也相当于子类中的保护型了,其他都是原属性继承,保护继承后子类不能直接访问父的所有方法和成员。
我们继续使用上面代码实验: