1、认识继承编程
什么是继承呢,就是一个对象有另外一个对象的全部特征,而且在这些特征上还有新的属于本身的特征,则一个对象就是另一个对象的继承。好比儿子继承父亲的相貌以外还有本身的相貌特征。在C++中,继承是面向对象复用的重要手段。经过继承定义一个类,它们的类型之间的关系建模,共享公有的东西,实现各自本质不一样的东西。ide
2、继承的做用函数
打个比方,你描述了狗这个对象,对于黑狗,只需描述狗是黑的这一特征,并不须要再去把狗描述一遍。由于黑狗继承了狗的全部特征,而且拥有本身是“黑”的这一特征。对于这样的继承,咱们能够利用过去的类创建新的类,节省编程工做量,减小冗余代码。this
3、继承关系spa
咱们都知道,在类中,有public,private,protected三种成员访问限定符,对于继承来的子类,它的成员又有怎样的访问限定呢?咱们经过一个表来讲明一下。
对象
同时,咱们经过实例来看一下他们之间的相互继承关系blog
class Base继承
{get
public:it
Base()
{
cout<<"B()" <<endl;
}
~Base ()
{
cout<<"~B()" <<endl;
}
void ShowBase()
{
cout<<"_pri = " <<_pri<< endl;
cout<<"_pro = " <<_pro<< endl;
cout<<"_pub = " <<_pub<< endl;
}
private:
int _pri;
protected:
int _pro;
public:
int _pub;
};
class Derived:public Base
{
public:
Derived()
{
cout<<"D()"<<endl;
}
~Derived ()
{
cout<<"~D()"<<endl;
}
void ShowDerived()
{
cout<<"_pri = "<<_pri<<endl;
cout<<"_pro = "<<_pro<<endl;
cout<<"_pub = "<<_pub<<endl;
cout<<"_d_pri = "<<_d_pri<< endl;
cout<<"_d_pro = "<<_d_pro<< endl;
cout<<"_d_pub = "<<_d_pub<< endl;
}
private:
int _d_pri;
protected:
int _d_pro;
public:
int _d_pub;
};
对于代码中的绿色的一行,显然是不可以被编译经过的,由于他在父类中的成员数据是private的,父类的私有成员在派生类中是不能被访问的。
4、派生类的默认成员函数
派生类也是类,也拥有类的默认成员函数,构造函数,拷贝构造函数,析构函数,赋值运算符重载,取地址符重载,const修饰的取地址操做符重载。
在类中,构造函数有着调用顺序,对于继承关系中的构造函数调用顺序又将是是怎样的呢?咱们来看一下。
同时析构函数的调用顺序以下图
class B
{
public:
int data1;
};
class B1: virtual public B
{
public:
int data2;
};
class B2: virtual public B
{
public:
int data3;
};
class D:public B1, public B2
{
public:
void FunTest()
{
B1::data1 = 0x01;
data2 = 0x02;
B2::data1 = 0x03;
data3 = 0x04;
data4 = 0x05;
cout<<this<<endl;
cout<<&B1::data1<<endl;
cout<<&data2<<endl;
cout<<&B2::data1<<endl;
cout<<&data3<<endl;
cout<<&data4<<endl;
cout<<data1<<endl;
}
int data4;
};
int main()
{
cout<<sizeof(B)<<endl;
cout<<sizeof(B1)<<endl;
cout<<sizeof(B2)<<endl;
cout<<sizeof(D)<<endl;
D d;
d.FunTest();
return 0;
}
5、单继承与多继承
单继承--一个子类只有一个直接父类时称这个继承关系为单继承
多继承--一个子类有两个或以上直接父类时称这个继承关系为多继承