一、從座標到圓柱虛函數
#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();
};
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();
}