“Square”"Circle": 不能实例化抽象类怎么修改

#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