一般的做法,也可以说比较笨的做法。再没有学习虚函数之前,好像这样做还是挺好的
简单说就是用不同的函数名字。
#include <iostream>
#include<math.h>
#define pi 3.14159
using namespace std;
//一般的做法是在派生类函数中重新定义面积和周长函数
//方便区分:用不同的函数名字
class shape
{
public:
double area(){return 0;}
double girth(){return 0;}
void show()
{
cout<<"shape object:"<<endl;
}
private:
};
//圆类
class circle:public shape
{
public:
circle();
double area();
double girth();
void show1();
private:
double r;
};
circle::circle()
{cout<<"输入圆形的半径:";
cin>>r;
}
double circle::area()
{
return pi*r*r;
}
double circle::girth()
{
return 2*pi*r;
}
void circle::show1()
{ show();
cout<<"圆.\n圆的半径是:"<<r<<"\n面积是:"<<area()<<"\n周长是:"<<girth()<<endl<<endl;
}
//三角形
class triangle :public shape
{
public:
triangle();
double area();
double girth();
void show1();
private:
double a,b,c;
};
triangle::triangle()
{
cout<<"输入三角形的三边长:";
cin>>a>>b>>c;
if(!(a+b>c&&a+c>b&&b+c>a))
{
cout<<"您输入三边无法组成三角形!请重新输入:";
cin>>a>>b>>c;
}
}
double triangle::area()
{
double s;
s=(a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
double triangle::girth()
{
return a+b+c;
}
void triangle::show1()
{
show();
cout<<"三角形.\n三角形三边分别是:\n"<<a<<" "<<b
<<" "<<c<<"\n面积是:"<<area()<<"\n三角形的周长是:"
<<girth()<<endl<<endl;
}
//矩形
class rectangle:public shape
{
public:
rectangle();
double area();
double girth();
void show1();
private:
double chang,kuan;
};
rectangle::rectangle()
{
cout<<"输入矩形的长和宽:";
cin>>chang>>kuan;
}
double rectangle::area()
{
return chang*kuan;
}
double rectangle ::girth()
{
return 2*(chang+kuan);
}
void rectangle::show1()
{
show();
cout<<"矩形.\n矩形的长和宽分别是:\n"<<chang<<" "
<<kuan<<"\n面积是:"<<area()<<"\n矩形的周长是:"<<girth()<<endl<<endl;
}
/////////完毕/////下面是主函数/////////////////////
int main()
{
circle c;
triangle t;
rectangle r;
c.show1();
t.show1();
r.show1();
return 0;
}
结果:
用虚函数,简单,方便,易懂:
#include <iostream>
#include<math.h>
#define pi 3.14159
using namespace std;
class shape
{
public:
//将面积和周长函数声明为纯虚函数
virtual double area()
{
return 0.0;
};
//周长
virtual double girth()
{
return 0.0;
};
virtual void show()
{
cout<<"shape object:"<<endl;
}
private:
};
//圆类
class circle:public shape
{
public:
circle();
virtual double area();
virtual double girth();
virtual void show();
private:
double r;
};
circle::circle()
{
cout<<"输入圆形的半径:";
cin>>r;
}
double circle::area()
{
return pi*r*r;
}
double circle::girth()
{
return 2*pi*r;
}
void circle::show()
{
//show();
cout<<"圆.\n圆的半径是:"<<r<<"\n面积是:"<<area()<<"\n周长是:"<<girth()<<endl<<endl;
}
//三角形
class triangle :public shape
{
public:
triangle();
virtual double area();
virtual double girth();
virtual void show();
private:
double a,b,c;
};
triangle::triangle()
{
cout<<"输入三角形的三边长:";
cin>>a>>b>>c;
if(!(a+b>c&&a+c>b&&b+c>a))
{
cout<<"您输入三边无法组成三角形!请重新输入:";
cin>>a>>b>>c;
}
}
double triangle::area()
{
double s;
s=(a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
double triangle::girth()
{
return a+b+c;
}
void triangle::show()
{
//show();
cout<<"三角形.\n三角形三边分别是:\n"<<a<<" "<<b
<<" "<<c<<"\n面积是:"<<area()<<"\n三角形的周长是:"
<<girth()<<endl<<endl;
}
//矩形
class rectangle:public shape
{
public:
rectangle();
virtual double area();
virtual double girth();
virtual void show();
private:
double chang,kuan;
};
rectangle::rectangle()
{
cout<<"输入矩形的长和宽:";
cin>>chang>>kuan;
}
double rectangle::area()
{
return chang*kuan;
}
double rectangle ::girth()
{
return 2*(chang+kuan);
}
void rectangle::show()
{
//show();
cout<<"矩形.\n矩形的长和宽分别是:\n"<<chang<<" "
<<kuan<<"\n面积是:"<<area()<<"\n矩形的周长是:"<<girth()<<endl<<endl;
}
/////////完毕/////下面是主函数/////////////////////
int main()
{
circle c;
triangle t;
rectangle r;
/*
cout<<"\n\n***************派生类对象圆点指依次输出各对象的信息***************";
c.show();
t.show();
r.show();*/
cout<<"\n\n***************用基类指依次输出各对象的信息***************\n\n";
shape *ptr;
ptr=&c;
ptr->show();
ptr=&t;
ptr->show();
ptr=&r;
ptr->show();
return 0;
}
结果: