C++——派生类的构造函数实例

news/2024/5/18 22:44:26 标签: 派生类, 构造函数, 实例, 初始化


1、简单的派生类构造函数

声明形式:派生类构造函数名(总参数列表):基类构造函数名(参数列表){派生类中新增加成员初始化语句}

#include<iostream>
#include<string>
using namespace std;
class student
{
  public:
     student(int n=0,string nam="null",char s='F'):num(n),name(nam),sex(s){}
     ~student(){}
     void show();
  protected:
     int num;
     string name;
     char sex;
};

void student::show()
{
    cout<<num<<" "<<name<<" "<<sex<<endl;
}

class student1:public student
{
     public:
        student1(int n,string nam,char s,int a,string ad):student(n,nam,s),age(a),add(ad){}
        ~student1(){}
        void show1();
     private:
        int age;
        string add;
};

void student1::show1()
{    cout<<"==========================================="<<endl;
     cout<<"    num:"<<num<<endl;
     cout<<"   name:"<<name<<endl;
     cout<<"    sex:"<<sex<<endl;
     cout<<"    age:"<<age<<endl;
     cout<<"address:"<<add<<endl;
}

int main()
{
     student1 s(10001,"zhangtong",'M',25,"Wuxi NewDistrict ZhongShanRoad 8#");
     s.show();
     s.show1();
     return 0;
}

2、含子对象的派生类构造函数

声明形式:派生类构造函数名(总参数列表):基类构造函数名(参数列表),子对象名(参数列表){派生类中新增加成员初始化语名句}

#include<iostream>
#include<string>
using namespace std;
class student
{
  public:
     student(int n=0,string nam="null",char s='F'):num(n),name(nam),sex(s){}
     ~student(){}
     void show();
  protected:
     int num;
     string name;
     char sex;
};

void student::show()
{
     cout<<"    num:"<<num<<endl;
     cout<<"   name:"<<name<<endl;
     cout<<"    sex:"<<sex<<endl;
}

class student1:public student
{
     public:
        student1(int n,string nam,char s,int n1,string nam1,char s1,int a,string ad):student(n,nam,s),monitor(n1,nam1,s1),age(a),add(ad){}
        ~student1(){}
        void show1();
     private:
        student monitor;
        int age;
        string add;
};

void student1::show1()
{    cout<<"This Student is:"<<endl;
     show();
     cout<<"    age:"<<age<<endl;
     cout<<"address:"<<add<<endl<<endl;
     cout<<"The Monitor is:"<<endl;
     monitor.show();
}

int main()
{
     student1 s(10001,"zhangtong",'M',10008,"limeng",'F',25,"Wuxi NewDistrict ZhongShanRoad 8#");
     s.show1();
     return 0;
}

运行结果:
This Student is:
    num:10001
   name:zhangtong
    sex:M
    age:25
address:Wuxi NewDistrict ZhongShanRoad 8#

The Monitor is:
    num:10008
   name:limeng
    sex:F
Press any key to continue...


3、多层派生时的构造函数

#include<iostream>
#include<string>
using namespace std;
class student
{
  public:
     student(int n=0,string nam="null"):num(n),name(nam){}
     ~student(){}
     void show();
  protected:
     int num;
     string name;
};

void student::show()
{
     cout<<"num : "<<num<<endl;
     cout<<"name: "<<name<<endl;
}

class student1:public student
{
     public:
        student1(int n,string nam,int a):student(n,nam),age(a){}
        ~student1(){}
        void show1();
     protected:
        int age;
};

void student1::show1()
{    cout<<"This Student is:"<<endl;
     show();
     cout<<"age : "<<age<<endl;
}

class student2:public student1
{
     public:
         student2(int n,string nam,int a,float s):student1(n,nam,a),score(s){}
         void show2();
     private:
         float score;
};

void student2::show2()
{
     show1();
     cout<<"score: "<<score<<endl;
}

int main()
{
     student2 s2(10001,"zhangtong",25,98.52);
     s2.show2();
     return 0;
}

    说明:如果在基类或子对象中定义了带参数的构造函数,则在派生类中必须显式地定义派生类构造函数,并写出基类或子对象
构造函数及参数表。


习题:
有以下程序,请写出运行结果:(注意构造函数的用法!)

#include<iostream>
using namespace std;
class A
{
  public:
     A(){a=0;b=0;}
     A(int i){a=i;b=0;}
     A(int i,int j){a=i;b=j;}
     void display(){cout<<"a="<<a<<" "<<"b="<<b<<" ";}
  private:
     int a,b;
};
class B:public A
{
   public:
      B(){c=0;}
      B(int i):A(i){c=0;}
      B(int i,int j):A(i,j){c=0;}
      B(int i,int j,int k):A(i,j),c(k){}
      void display1()
          {
             display();
             cout<<"c="<<c<<endl;
          }
   private:
      int c;
};

int main()
{
   B b1;
   B b2(1);
   B b3(1,3);
   B b4(1,3,5);
   b1.display1();
   b2.display1();
   b3.display1();
   b4.display1();
   return 0;
}


运行结果:

a=0 b=0 c=0
a=1 b=0 c=0
a=1 b=3 c=0
a=1 b=3 c=5
Press any key to continue...


http://www.niftyadmin.cn/n/768577.html

相关文章

输入adb shell,提示device not found

在windows下运行adb shell的时候&#xff0c;很多人遇到这个情况&#xff0c;网上解释颇多。 最终发现&#xff0c;电脑上的 android 的版本的 adb.exe要适用于实体机器。 用匹配版本的adb.exe&#xff0c; 解决方案是&#xff1a;运行 “adb kill-server”, 然后运行“adb s…

linux体系结构与内核结构图解

1&#xff0e;当被问到Linux体系结构&#xff08;就是Linux系统是怎么构成的&#xff09;时&#xff0c;我们可以参照下图这么回答&#xff1a;从大的方面讲&#xff0c;Linux体系结构可以分为两块&#xff1a; &#xff08;1&#xff09;用户空间&#xff1a;用户空间中又包含…

memcpy和memmove的区别与联系

memcpy和memmove&#xff08;&#xff09;都是C语言中的库函数&#xff0c;在头文件string.h中&#xff0c;作用是都是将N个字节的源内存地址的内容拷贝到目标内存地址中。 原型分别如下&#xff1a; void *memcpy(void *dst, const void *src, size_t count); void *memmov…

strlen 和 sizeof的区别与解析

例子&#xff1a; char *c"abcdef"; char d[]"abcdef"; char e[]{a,b,c,d,e,f}; printf("sizeof(c):%d\tstrlen(c):%d\n",sizeof(c),strlen(c)); printf("sizeof(d):%d\tstrlen(d):%d\n",sizeof(d),strlen(d)); printf("si…

VI中如何去掉DOS文件中的换行符^M

在window下面保存的文件&#xff0c;有的时候会习惯地方式传递到Ubuntu下&#xff0c;用vi查看编辑此类文件时候&#xff0c;总会有^M出现在行尾如下图所示&#xff1a; 这是因为windows下的换行符与unix上的不同。 那么如何快速去掉^M呢&#xff0c;采取以下步骤就行了&#…

移位操作及其在数据类型转换中的作用

一&#xff0e;对移位操作的基本概述&#xff1a; 1、什么样的数据类型可以直接移位 char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都可以进行移位操作&#xff0c;而double、float、bool、long double则不可以进行移位操作。 2、有符…

哈佛结构与冯.诺依曼结构

1. 哈佛结构及其主要特征&#xff1a; 哈佛结构是一种存储器结构。使用哈佛结构的处理器有&#xff1a;AVR、ARM9、ARM10、ARM11等。目前使用哈佛结构的中央处理器和微控制器有很多&#xff0c;除了Microchip公司的PIC系列芯片&#xff0c;还有摩托罗拉公司的MC68系列、Zilog公…

最全最详细的蓝牙版本介绍包含蓝牙4.0和4.1

概述&#xff1a;蓝牙核心规范发展的主要版本&#xff1a; 表1 蓝牙核心规范发展介绍 版本 规范发布 增强功能 0.7 1998.10.19 Baseband、LMP 0.8 1999.1.21 HCI、L2CAP、RFCOMM 0.9 1999.4.30 OBEX与IrDA的互通性 1.0 Draft 1999.7.5 SDP、TCS 1.0 A 1999.7.…