写一个程序,定义抽象基类Shape,由他派生出三个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,三个图形的数据在定义对象时给定
代码1#include#include using namespace std; #define n 3 //使用宏定义或者const都行 //const int n=3; class Shape{ public: //成员函数后面用 const 修饰,const表示this是一个指向常量的指针, //即对象成为一个常量,即它的成员不能够变化. virtual double area()const{ return 0.0; } //一个类里如果包含 =0 的纯虚函数,那么这个类就是一个抽象类,它不能具体实例化(不能创建它的对象),而只能由它去派生子类 virtual void Tname()const=0; }; class Circle:public Shape{ public: Circle();//无参构造 Circle(double r):radius(r){}//带参构造 //对虚函数进行再定义 //这里没有加virtual,不加的话系统会默认加上 double area()const{ return 3.14*pow(radius,2); } void Tname()const{ cout<<"Circle:"; } private: double radius; }; class Rectangle:public Shape{ public: Rectangle(); Rectangle(double h,double w):high(h),wide(w){} //这里对虚函数进行再定义 virtual double area()const{ return high*wide; } virtual void Tname()const{ cout<<"Rectangle"; } private: double high,wide; }; class Triangle:public Shape{ public: Triangle(); Triangle(double b,double h){ base=b; high=h; } double area()const{ return high*base/2; } void Tname()const{ cout<<"Triangle:"; } private: double high,base; }; void printArea(){ Circle c(2); Rectangle re(2.5,3.25); Triangle tr(3.3,4.7); Shape *pt;//定义基类指针 pt=&c;//指针指向Circle类对象 c.Tname();//静态关联 cout< area()< area()< area()< 运行结果1 实验2 写一个程序,定义抽象基类Shape,由他派生出三个派生类:Square(正方形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形的面积,并求他们的和。要求使用基类指针数组,是它的每一个元素指向一个派生类对象。
代码2#include#include using namespace std; //#define n 3 //使用宏定义或者const都行 const int n=3; class Shape{ public: //成员函数后面用 const 修饰,const表示this是一个指向常量的指针, //即对象成为一个常量,即它的成员不能够变化. virtual double area()const{ return 0.0; } //一个类里如果包含 =0 的纯虚函数,那么这个类就是一个抽象类,它不能具体实例化(不能创建它的对象),而只能由它去派生子类 virtual void Tname()const=0; }; class Square:public Shape{ public: Square();//无参构造 Square(double s):square(s){}//带参构造 //对虚函数进行再定义 //这里没有加virtual,不加的话系统会默认加上 double area()const{ return pow(square,2); } void Tname()const{ cout<<" Square: "; } private: double square; }; class Trapezoid:public Shape{ public: Trapezoid(); //声明带参构造函数 Trapezoid(double h,double b1,double b2); //这里对虚函数进行再定义 virtual double area()const{ return high*(base1+base2)/2; } virtual void Tname()const{ cout<<" Trapezoid: "; } private: double high,base1,base2; }; //类外定义带参构造函数 Trapezoid::Trapezoid(double h,double b1,double b2):high(h),base1(b1),base2(b2){} class Triangle:public Shape{ public: Triangle(); Triangle(double b,double h){ base=b; high=h; } double area()const{ return high*base/2; } void Tname()const{ cout<<" Triangle: "; } private: double high,base; }; void printArea(){ Square sq(2.5); Trapezoid tra(2,3.25,5.5); Triangle tri(3.3,4.7); Shape *pt[n]={&sq,&tra,&tri};//定义基类指针数组并指向各个对象 double sumarea=0;//定义面积总和 for(int i=0;i Tname();//用指针建立动态关联 cout< area()< area(); } cout<<" The sum of the areas is: "< 运行结果2 总结 这两个实验考察的知识点有对多态性的了解,虚函数的作用及其用法,静态关联和动态关联的概念和用法,如何定义和使用纯虚函数和抽象类
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)