派生类与继承

1、下面的程序可以输出ASCII字符与所对应的数字的对照表。修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。

class table

{

   public:

       table(int p)

       {

           i=p;

       }

      void ascii(void);

   protected:

          int i;

};

void table::ascii(void)

{

    int k=1;

    for (;i<127;i++)

    {

        cout<<setw(4)<<i<<" "<<(char)i;

        if((k)%12==0)

             cout<<"\n";

        k++;

    }

    cout<<"\n";

 

}

class der_table:public table

{

public:

    der_table(int p,char *m):table(p)

    {

        c=m;

    }

    void print(void);

protected:

    char *c;

};

void der_table::print(void)

{

    cout<<c<<"\n";

    table::ascii();

}

int main()

{

    der_table obl(32,"ASCII value---char");

    obl.print();

    return 0;

}

提示:修改后的主程序为:

int main()

{

    der_table ob('a','z',"ASCII value---char");

    ob.print();

    return 0;

}

 

 

#include<iostream>

#include<iomanip>

using namespace std;

class table

{

protected:

    int i;

    int j;

public:

    table(int p,int q)

    {

        i=p;

        j=q;

    }

    void ascii()

    {

        int k=1;

        for(;i<=j;i++)

        {

             cout<<setw(4)<<i<<" "<<(char)i;

             if((k)%12==0)

                 cout<<endl;

             k++;

        }

        cout<<endl;

    }

};

class der_table:public table

{

protected:

    char *c;

public:

    der_table(int p,int q,char *m):table(p,q)

    {

        c=m;

    }

    void print()

    {

        cout<<c<<endl;

        table::ascii();

    }

};

int main()

{

    der_table ob('a','z',"ASCII value---char");

    ob.print();

    return 0;

}

2、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。

class Time

{

    public:

        Time(int h,int m, int s)

        {

             hours=h;

             minutes=m;

             seconds=s;

        }

        void display()

        {

             cout<<"出生时间:"<<hours<<"时"<<minutes<<"分"<<seconds<<"秒"<<endl;

        }

    protected:

        int hours,minutes,seconds;

};

class Date

{

   public:

      Date(int m,int d,int y)

      {

         month=m;

         day=d;

         year=y;

      }

      void display()

      {

         cout<<"出生年月:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;

      }

   protected:

      int month,day,year;            

};

 

 

 

#include<iostream>

#include<string>

using namespace std;

class time

{

protected:

    int hours,minutes,seconds;

public:

    time(int h,int m,int s)

    {

        hours=h;

        minutes=m;

        seconds=s;

    }

    void display()

    {

        cout<<"出生时间:"<<hours<<"时"<<minutes<<"分"<<seconds<<"秒"<<endl;

    }

};

class date

{

protected:

    int month,year,day;

public:

    date(int m,int d,int y)

    {

        month=m;

        day=d;

        year=y;

    }

    void display()

    {

        cout<<"出生年月"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;

    }

};

    class birthtime:public time,public date

    {

    private:

        string childname;

    public:

        birthtime(int h,int m,int s,int m1,int d,int y,string n):time(h,m,s),date(m1,d,y)

        {

             childname=n;

        }

        void display()

        {

           time::display();

           date::display();

             cout<<"名字是:"<<childname<<endl;

        }

    };

    int main()

    {

        birthtime a(0,6,33,6,29,2000,"jassic");

        a.display();

        return 0;

    }

3、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。

 

 

 

#include<iostream>

#include<string>

using namespace std;

class person

{

private:

    int num;

    string name;

public:

    person(int n,string na)

    {

        cout<<"putin the num:";

        cin>>n;

        num=n;

        cout<<endl<<"putin the name:";

        cin>>na;

        name=na;

    }

    void show()

    {

        cout<<"the name is:"<<name<<endl<<"the number is:"<<num<<endl;

    }

};

class student:public person

{

private:

    int classnum;

    float score;

public:

    student(int n,string na,int cn,float s):person(n,na)

    {

        cout<<"please putin the classnum:";

        cin>>cn;

        cout<<endl<<"please putin the score:";

        classnum=cn;

        cin>>s;

        score=s;

    }

    void show1()

    {

        show();

        cout<<"the classnumber is:"<<classnum<<endl<<"the score is:"<<score<<endl;

    }

};

class teacher:public person

{

private:

    string title;

    string depart;

public:

    teacher(int n,string na,string t,string d):person(n,na)

    {

        cout<<"please putin the title:";

        cin>>t;

        title=t;

        cout<<endl<<"please putin the department:";

        cin>>d;

        depart=d;

    }

    void show2()

    {

        show();

        cout<<"the title is :"<<title<<endl<<"the department is:"<<depart<<endl;

    }

};

int main()

{

    int m,cln;

    string n;

    float sc;

    student s(m,n,cln,sc);

    s.show1();

    string t;

    string d;

    teacher te(m,n,t,d);

    te.show2();

    return 0;

}

4、给出下面的基类:

class area

{

   protected:

       double height;

       double width;

   public:

       area(double h,double w)

       {

           height=h;

           width=w;

       }

       virtual double getarea()=0;

};

【要求】

(1)建立基类area的俩个派生类rectangle与isosceles,让每一个派生类都包含一个函数getarea(),分别用来返回矩形与三角形的面积。用构造函数对height与width进行初始化。

(2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。

(3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。

 

 

#include<iostream>

using namespace std;

class area

{

protected:

    double height;

    double width;

public:

    area(double h,double w)

       {

           height=h;

           width=w;

       }

       virtual double getarea()=0;

};

class rectangle:public area

{

private:

    double a;

public:

    rectangle(double a,double b):area(a,b)

    {}

    virtual double getarea()

    {

        a=height*width;

        return a;

    }

};

class isosceles:public area

{

private:

    double a;

public:

    isosceles(double a,double b):area(a,b)

    {}

    virtual double getarea()

    {

        a=0.5*height*width;

        return a;

    }

};

    int main()

{

    area *mp;

    rectangle r(10.0,5.0);

    mp=&r;

    cout<<"the area of rectangle is:"<<mp->getarea()<<endl;

    isosceles i(4.0,6.0);

    mp=&i;

    cout<<"the area of isosceles is:"<<mp->getarea()<<endl;

    return 0;

}

5、编写一个程序,递归调用被继承的基类成员函数,实现求素数的功能。

 

 

#include<iostream>

using namespace std;

class base

{

private:

    int x;

public:

    base(int p)

    {

        x=p;

    }

    int fun(int j)

    {

        int t=2,f=1;

        for(;t<j&&f==1;t++)

        {

             if(j%t==0)

                 f=0;

             return f;

        }

    }

};

class derive:public base

{

protected:

    char *c;

public:

    derive(char *m):base(2)

    {

        c=m;

    }

    int fun1(int l)

    {

        return base::fun(l);

    }

};

int main()

{

    derive a("base\n");

    int n;

    cout<<"please input a int :";

    cin>>n;

    if(a.fun1(n)==1)

        cout<<n<<"is prime number"<<endl;

    else

        cout<<n<<"is not prime number"<<endl;

    return 0;

}

posted @ 2018-02-12 09:49  夜游星  阅读(2499)  评论(0编辑  收藏  举报