C语言/C++ 之 继承与派生、多态性与虚函数(4/5)

一、实验目的:

1.了解面向对象的程序设计的特点、思想,了解类的封装性和信息隐蔽。

2.掌握类和对象的定义和作用,熟练应用类和对象。

3.掌握类的成员函数的定义,熟练定义、应用类的成员函数。

4.掌握对象成员的引用,熟练应用对象成员的引用。

5.掌握构造函数、析构函数,要求熟练应用。

二、实验内容

  1. 编程实现:分析程序

程序代码:

#include <iostream.h>

class base

{   int n;

扫描二维码关注公众号,回复: 15496707 查看本文章

public:

    base(int a)

    {   cout<<"constructing base class "<<endl;

       n=a;

       cout<<"n="<<n<<endl;

    }

    ~base(){ cout<<"destructing base blass"<<endl; }

};

class subs:public base

{  

int m;

public:

    subs(int a,int b):base(a)

    {  

cout<<"constructing sub class "<<endl;

       m=b;

       cout<<"m="<<m<<endl;

    }

    ~subs(){ cout<<"destructing sub blass"<<endl;  

}

};

void main()

{  

subs s(1,2); 

 }

程序测试及运行结果:

  1. 编程实现: 分析程序

程序代码:

#include <iostream.h>

class A

{   int a;

public:

A(int i){ a=i;   cout<<"constructing class A"<<endl;  }

void print(){  cout<<a<<endl; }

~A(){ cout<<"destructing class A"<<endl; }

};

class B1:public A

{   int b1;

public:

B1(int i,int j):A(i)

{       b1=j; cout<<"constructing class B1"<<endl;      }

void print()

{   A::print();     cout<<b1<<endl; }

~B1(){ cout<<"constructing class B1"<<endl;  }

};

class B2:public A

{   int b2;

public:

B2(int i,int j):A(i)

{       b2=j; cout<<"constructing class B2"<<endl;      }

void print()

{   A::print();     cout<<b2<<endl; }

~B2(){ cout<<"constructing class B2"<<endl;  }};

class C:public B1,public B2

{   int c;

public:

C(int i,int j,int k,int l,int m):B1(i,j),B2(k,l),c(m)

{   cout<<"constructing class C"<<endl; }

void print()

{   B1::print();

B2::print();

cout<<c<<endl;}

~C(){  cout<<"destructing class C"<<endl;}};

void main()

{   C c1(1,2,3,4,5);

c1.print();}

程序测试及运行结果:

  1. 编程实现:分别声明Teacher(教师)类和Cadre(干部)类,

采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)类。

程序代码:

#include<iostream>

#include<string>

using namespace std;

class Teacher

{   public:

       Teacher(string nam,int a,char s,string tit,string ad,string t);

       void display();

    protected:

       string name;//姓名

       int age; //年龄

       char sex;// 性别

       string title;//职称

       string addr;//地址

       string tel;//电话

};

Teacher::Teacher(string nam,int a,char s,string tit,string ad,string t):name(nam),age(a),sex(s),title(tit),addr(ad),tel(t)

{}

void Teacher::display()

{

    cout<<"name:"<<"姓名"<<endl;   

    cout<<"age:"<<"年龄"<<endl;

    cout<<"sex:"<<"性别"<<endl;

    cout<<"title:"<<"职称"<<endl;

    cout<<"address:"<<"地址"<<endl;

    cout<<"tel:"<<"电话"<<endl;

}

class Cadre

{

    public:

       Cadre(string nam,int a,char s,string p,string ad,string t);

       void display();

    protected:

       string name;

       int age;

       char sex;

       string post;

       string addr;

       string tel;

};

Cadre::Cadre(string nam,int a,char s,string p,string ad,string t):name(nam),age(a),sex(s),post(p),addr(ad),tel(t)

{}

void Cadre::display()

{

    cout<<"name:"<<name<<endl;

    cout<<"age:"<<age<<endl;

    cout<<"sex:"<<sex<<endl;

    cout<<"post:"<<post<<endl;

    cout<<"address:"<<addr<<endl;

    cout<<"tel:"<<tel<<endl;

}

class Teacher_Cadre:virtual public Teacher,virtual public Cadre

{

    public:

       Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w);

       void show();

    private:

       float wages;

};

Teacher_Cadre::Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w):Teacher(nam,a,s,tit,ad,t),Cadre(nam,a,s,p,ad,t),wages(w)

//这里构造函数由于是一个人的名字,就可以用同一个nam,a,s

{}

void Teacher_Cadre::show()

{

    Teacher::display();//引用须指明作用域,否则会出现二义性

    cout<<"post:"<<Cadre::post<<endl;

    cout<<"wages:"<<wages<<endl;

}

int main()

{

    Teacher_Cadre teacher_cadre1("Wang-li",50,'f',"prof.","president","135 Beijing Road,Shanghai","(021)61234567",1534.5);

    teacher_cadre1.show();

    return 0;

}

程序测试及运行结果:

未完待续。。。

猜你喜欢

转载自blog.csdn.net/qq_59819866/article/details/131438172