子类构造和父类构造的关系

一 构造函数和析构函数的调用顺序
  1 儿子不能继承父亲的构造和析构函数
  2 执行顺序
 class Base
 {
    public:
      Base()
      { cout<<"基类的构造函数执行!"<<endl; }
      ~Base()
      { cout<<"基类的析构函数执行!"<<endl ;}
 };
 class DDD
 {
  public:
    DDD()
    { cout<<"DDD类的构造函数"; }
    ~DDD()
    { cout<<"DDD类的析构函数"; }
 };
 class Son:public Base
 {
   private:
     DDD  d;
   public:
      Son()
      { cout<<"子类的构造函数 !" <<endl;}
      ~Son()
      { cout<<"子类的析构函数 !"<<endl; }
 };
 void main()
 {
   Son s;


 }
  (1) 创建父类的对象,构造函数的执行和子类没有关系。
 (2)创建子类的对象,构造函数的执行顺序:
    (i)首先执行父类的构造函数
    (ii)再是对象所在类的构造函数
   (iii)析构函数的执行顺序和构造函数相反
二 子类构造函数的格式:
  1 如果父类中只有无参的构造函数,子类不需要调用父类的构造函数。
  2 如果父类中有带参数的构造函数,子类必须要调用父类的构造函数,向父类传递参数。
class Person
{
   protected:
      char name[100];
      int age;
   public:
      Person(char s[100],int sage)
      {
          strcpy(name,s);
          age=sage;
      }
      void showp()
      { cout<<"姓名:"<<name<<" 年:"<<age<<endl;}
};
//Student: 成员变量name,age,g
class Student:public Person
{
   protected:
     int g;
   public:
     Student(char s1[100],int sage,int g):Person(s1,sage)
     {
        this->g=g;
     }
     void shows()
     {
        cout<<"姓名:"<<name<<" 年:"<<age
            <<"成绩:"<<g<<endl;
     }
};
void main()
{
   Student s("孙璐",33,89);
   s.shows();
}
  3 传递参数的格式:
    子类的构造函数:父类构造函数名(参数列表)
  4 一般子类的构造函数带参数的个数=继承下来的成员变量+子类自己成员变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值