C++實驗20

一、從座標到圓柱虛函數

#include<iostream>
using namespace std;

class points
{
    float x;
    float y;
public:
    points(float a=0, float b=0)
    {
        x=a;
        y=b;
    }
    virtual void show()
    {
        cout<<"points:"<<endl;
        cout<<"x="<<x<<'\t'<<"y="<<y<<endl<<endl;

    }
    void center()
    {
        cout<<"("<<x<<","<<y<<")"<<endl;
    }
    ~points(){}
};

class circle:public points
{
    float r;
public:
    circle(float a=0, float b=0, float c=0):points(a,b)
    {
        r=c;
    }
    void show()
    {
        cout<<"circle:\n";
        cout<<"center:";
        center();
        cout<<"r="<<r<<endl;
        cout<<endl;
    }
    void show_circle()
    {
        cout<<"center:";
        center();
        cout<<"r="<<r<<endl;
    }
    float area()
    {
        return 3.14*r*r;
    }
};

class cylinder:public circle
{
    float hight;
public:
    cylinder(float a=0,float b=0,float c=0,float d=0):circle(a,b,c)
    {
        hight=d;
    }
    void show()
    {
        cout<<"cylinder\n";
        show_circle();
        cout<<"hight="<<hight<<endl;
    }
    float volume()
    {
        return area()*hight;
    }
};

void main()
{
    points a(2,3);
    circle b(4,5,1);
    cylinder c(6,8,2,1);
    points *d;
    d=&a;
    d->show();
    d=&b;
    d->show();
    d=&c;
    d->show();
}

二、從座標到圓柱虛基類

#include<iostream>
using namespace std;

class shape
{
public:
    virtual void show()=0;
};

class points:public shape
{
    float x;
    float y;
public:
    points(float a=0, float b=0)
    {
        x=a;
        y=b;
    }
    void show()
    {
        cout<<"points:"<<endl;
        center();
        cout<<endl;
    }
    void center()
    {
        cout<<"("<<x<<","<<y<<")"<<endl;
    }
    ~points(){}
};

class circle:public points
{
    float r;
public:
    circle(float a=0, float b=0, float c=0):points(a,b)
    {
        r=c;
    }
    void show()
    {
        cout<<"circle:\n";
        cout<<"center:";
        center();
        cout<<"r="<<r<<endl;
        cout<<endl;
    }
    void show_circle()
    {
        cout<<"center:";
        center();
        cout<<"r="<<r<<endl;
    }
    float area()
    {
        return 3.14*r*r;
    }
};

class cylinder:public circle
{
    float hight;
public:
    cylinder(float a=0,float b=0,float c=0,float d=0):circle(a,b,c)
    {
        hight=d;
    }
    void show()
    {
        cout<<"cylinder\n";
        show_circle();
        cout<<"hight="<<hight<<endl;
    }
    float volume()
    {
        return area()*hight;
    }
};

void main()
{
    shape *p;
    points a(2,3);
    circle b(4,5,1);
    cylinder c(6,8,2,1);
    p=&a;
    p->show();
    p=&b;
    p->show();
    p=&c;
    p->show();
}

三、從學生類到擴展虛函數虛基類

#include<iostream>
#include<string.h>

class student
{
    int id;
    char name[20];
    char sex[6];
    int age;
public:
    student(int a,char *b, char *c, int d)
    {
        id=a;strcpy(name,b);strcpy(sex,c);age=d;
        std::cout<<"student constructor\n";
    }
    ~student(){std::cout<<"student destructor\n";}
    void print_student();
    virtual void show();
    //virtual void show()=0定義爲純虛函數也可,main中未定義student對象
};
class phd: public student
{
    int papernum;
    float workhour;
public:
    phd(int a, char *b, char *c, int d,int e, float f):student(a,b,c,d)
    {
        papernum=e;
        workhour=f;
        std::cout<<"phd constructor\n";
    }
    ~phd(){std::cout<<"phd destructor\n";}
    void print_phd();
    void show();
};
class master: public student
{
    float grade;
    int flag;
public:
    master(int a, char *b, char *c, int d, float e, int f):student(a,b,c,d)
    {
        grade=e;
        flag=f;
        std::cout<<"master constructor\n";
    }
    ~master(){std::cout<<"master destructor\n";}
    void print_master();
    void show();
};
class undergraduate: public student
{
    float gradein;
    float gradeout;
public:
    undergraduate(int a, char *b, char *c, int d, float e, float f):student(a,b,c,d)
    {
        gradein=e;
        gradeout=f;
        std::cout<<"undergraduate destructor\n";
    }
    ~undergraduate(){std::cout<<"undergraduate destructor\n";}
    void print_undergraduate();
    void show();
};
void student::print_student()
{
    std::cout<<"idnumber: "<<id<<"\nname: "<<name<<"\nsex: "<<sex<<"\nage: "<<age<<'\n';
}
void student::show() {print_student();}
void phd::print_phd()
{
    print_student();
    std::cout<<"paper number: "<<papernum<<"\nworking hours: "<<workhour<<'\n';
}
void phd::show() {print_phd();}
void master::print_master()
{
    print_student();
    std::cout<<"grade: "<<grade<<"\nattending? ";
    if(flag)
        std::cout<<"yes\n";
    else
        std::cout<<"no\n";
}
void master::show() {print_master();}
void undergraduate::print_undergraduate()
{
    print_student();
    std::cout<<"incourse grade: "<<gradein<<"\noutcourse grade: "<<gradeout<<'\n';
}
void undergraduate::show() {print_undergraduate();}
void main()
{
    phd a(12345678,"張三","男",25,3,20);
    master b(2234567,"李四","女",24,98,0);
    undergraduate c(32345678,"趙五","男",23,100,100);
    student *p;
    p=&a;
    p->show();
    std::cout<<'\n';
    p=&b;
    p->show();
    std::cout<<'\n';
    p=&c;
    p->show();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章