#include<iostream>
using namespace std;
#include<cstdlib>
class Shape
{
public:
virtual float area()=0;
virtual void setData(float,float=0)=0;
};
class Triangle:public Shape
{
float w,h;
public:
Triangle(float w=0,float h=0)
{this->w=w;this->h=h;};
virtual void setData(float ww,float hh)
{w=ww;h=hh;};
virtual float area()
{return w*h/2;};
};
class Rectangle:public Shape
{
float w,h;
public:
Rectangle(float w=0,float h=0)
{this->w=w;this->h=h;};
virtual float area()
{return w*h;};
virtual void setData(float ww,float hh)
{w=ww;h=hh;};
};
class Square:public Shape
{
float s;
public:
Square(float s=0,float a=0)
{this->s=s;};
virtual float area()
{return s*s;};
virtual void setData(float ss)
{s=ss;};
};
class Circle:public Shape
{
float r;
public:
Circle(float r=0,float a=0)
{this->r=r;};
virtual float area()
{return r*r*3.14;};
virtual void setData(float ss)
{r=ss;};
};
void main()
{
Triangle T;
Rectangle R;
Square S;
Circle C;
Shape *p=new Triangle;
p->setData(3.0,4.0);
cout<<"area1="<<p->area()<<endl;
p=new Rectangle;
p->setData(3.0,4.0);
cout<<"area2="<<p->area()<<endl;
p=new Square;
p->setData(3.0,4.0);
cout<<"area3="<<p->area()<<endl;
p=new Circle;
p->setData(3.0,4.0);
cout<<"area4="<<p->area()<<endl;
system("pause");
}
抽象类是不能实例化的,只有继承Shape类的类,可以实例化父类中的抽象函数。
我看了一下代码,你两个类里没有默认的构造函数
#include <vector>
#include <stdio.h>
#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include<stdio.h>
#include<iostream>
using namespace std;
#include<cstdlib>
class Shape
{
public:
virtual float area() = 0;
virtual void setData(float = 0, float = 0) = 0;
};
class Triangle :public Shape
{
float w, h;
public:
Triangle(float w = 0, float h = 0)
{
this->w = w; this->h = h;
};
virtual void setData(float ww, float hh)
{
w = ww; h = hh;
};
virtual float area()
{
return w * h / 2;
};
};
class Rectangle :public Shape
{
float w, h;
public:
Rectangle(float w = 0, float h = 0)
{
this->w = w; this->h = h;
};
virtual float area()
{
return w * h;
};
virtual void setData(float ww, float hh)
{
w = ww; h = hh;
};
};
class Square :public Shape
{
float s;
public:
Square(float s = 0, float a = 0)
{
this->s = s;
};
virtual float area()
{
return s * s;
};
virtual void setData(float ss,float s)
{
s = ss;
};
};
class Circle :public Shape
{
float r;
public:
Circle(float r = 0, float a = 0)
{
this->r = r;
};
virtual float area()
{
return r * r * 3.14;
};
virtual void setData(float ss,float s)
{
r = ss;
};
};
void main()
{
Triangle T;
Rectangle R;
/* Square S;
Circle C;*/
Shape* p = new Triangle;
p->setData(3.0, 4.0);
cout << "area1=" << p->area() << endl;
p = new Rectangle;
p->setData(3.0, 4.0);
cout << "area2=" << p->area() << endl;
p = new Square(1,2);
p->setData(3.0, 4.0);
cout << "area3=" << p->area() << endl;
p = new Circle;
p->setData(3.0, 4.0);
cout << "area4=" << p->area() << endl;
system("pause");
}
抽象类是不能实例化的,可以实例化他的子类。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632