派生類與繼承


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;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM