c++之继承

子类对象空间总是不小于基类对象。

        classFather{

          int a,b;

         public:

         // 成员函数

        };

        class Son:publicFather{

         int c;

        public:

          // 成员函数

        };

默认构造:
如果子类没有构造函数,则调用默认构造函数,默认构造函数转而先调用默认父类构造函数,完成父类对象部分的构造。
如果父类的上面还有父类,则依次递归。

自定义构造:
为了规定父类构造函数的调用方式而不是默认调用,需要自定义子类构造函数,并且,在构造函数定义体的初始化列表中描述父类构造函数的调用形式。描述形式与对象成员构造的描述一致。

覆盖(overlap):
子类定义了与祖先类(父类,或者父类的父类...)名字相同的成员.

class Student{
public:
  void display();
  // ...
};
class GraStudent:public Student{
public:
  void display();//overlap
  // ...
};
void fn(){
  GraStudent gs;
  gs.display(); //callGraStudent::display()
}
捆绑子类对象访问成员函数,则首先匹配子类,然后父类,再父类的父类,依此类推。

拷贝构造:
子类若没有定义拷贝构造函数,则子类对象在拷贝创建时先调用父类的拷贝构造函数,再完成自己的位对位拷贝。
父类若没有定义拷贝构造函数,则子类对象在拷贝创建中调用父类默认的拷贝构造函数。
继承方式:

继承可以公有继承,保护继承和私有继承。

公有继承是普通继承,基类可以为大多数应用服务,也可以重复继承。

保护继承是“单传”继承,只继承给自己的后代,应用是以子孙的公有成员函数来对外展开服务的。

私有继承是“绝版”继承,该基类只继承直接的子类,而不考虑让子类再继承下去。

继承体系中,子类可以在祖先类成员可见的范围中调整其访问控制属性。

 


class Base{
  int b1;
protected:
  int b2;
  void fb2(){ b1=1; }
public:
  int b3;
  void fb3(){ b1=1; }
};//-----------------------------------
class Pri : private Base{
public:
  void test(){
    b1=1;    // error
    b2=1;    // ok
    b3=1;    // ok
    fb2();   // ok
    fb3();   // ok
  }
};//-----------------------------------
class FromPri : public Pri{
public:
  void test(){
    b1=1;     // error
    b2=1;     // error
    b3=1;     // error
    fb2();    // error
    fb3();    // error
  }
};//-----------------------------------
class Pro : protected Base{
public:
  void test(){
    b1=1;     // error
    b2=1;     // ok
    b3=1;     // ok
    fb2();    // ok
    fb3();    // ok
  }
};//-----------------------------------
class FromPro : public Base{
public:
  void test(){
    b1=1;     // error
    b2=1;     // ok
    b3=1;     // ok
    fb2();    // ok
    fb3();    // ok
  }
};//-----------------------------------
class Pub : public Base{
public:
  void test(){
    b1=1;      // error
    b2=1;      // ok
    b3=1;      // ok
    fb2();     // ok
    fb3();     // ok
  }
};//-----------------------------------
class FromPub : public Base{
public:
  void test(){
    b1=1;      // error
    b2=1;      // ok
    b3=1;      // ok
    fb2();     // ok
    fb3();     // ok
  }
};//-----------------------------------
int main(){
  Pri priObj;
  priObj.b1=1;   // error
  priObj.b2=1;   // error
  priObj.b3=1;   // error
  Pro proObj;
  proObj.b1=1;   // error
  proObj.b2=1;   // error
  proObj.b3=1;   // error
  Pub pubObj;
  pubObj.b1=1;   // error
  pubObj.b2=1;   // error
  pubObj.b3=1;   // ok
}//====================================

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值