【发布时间】:2019-11-04 21:37:52
【问题描述】:
我尝试创建一个包含 2 个方法的基本虚拟类“Shape”。下面我创建了 3 个从基类继承的子类。在主函数中,我创建了 3 个实例,每个子类一个,并且我希望有一个从我的基类创建的所有子类的列表,该列表应该可以通过基类中定义的任一虚拟方法进行排序。
我尝试根据互联网上的一些示例来实现列表库,但我对它的理解不够好,无法使其工作。
#include <iostream>
#include <cmath>
#include <conio.h>
#include <list>
using namespace std;
class Shape
{
protected:
int value_;
public:
/*static list<Shape*> instances_;
Shape(int val);
static void showList();*/
virtual void surface()=0;
virtual void circuit()=0;
};
/*Shape::Shape(int val) {
instances_.push_back(this);
value_ = val;}
list<Shape*> Shape::instances_;
void Shape::showList() {
for (list<Shape*>::iterator p = instances_.begin();
p != instances_.end(); ++p)
cout << (*p)->value_ << endl;}*/
//////////////////////////////////
class Circle :public Shape
{
float r;
public:
Circle(float x)
{
r=x;
}
virtual void surface()
{
cout<<"Circle surface: "<<3.14*r*r<<endl;
}
virtual void circuit(){
cout<<"Circle circuit: "<<3.14*2*r<<endl;
}
};
////////////////////////////////////////
class Square:public Shape
{
float a;
public:
Square:public (float x)
{
a=x;
}
virtual void surface()
{
cout<<"Square surface: "<<a*a<<endl;
}
virtual void circuit(){
cout<<"Square circuit : "<<4*a<<endl;
}
};
int main()
{
Circle k(8);
Square kw(2);
return 0;
};
【问题讨论】:
-
其中一半被注释掉了。将其转换为显示您的问题的最小示例。
-
除了您绝对应该阅读有关虚拟析构函数和“覆盖”关键字的事实之外,您究竟想要实现什么?类列表?这是什么意思?
-
您想要类列表还是实例列表?你想达到什么目的?这一切都非常不清楚。作为一般建议,请使用tour 并阅读How to Ask。
-
我想要一个包含任何子类(圆形、方形)的所有实例的可排序列表。我注释掉了我使用 lst 库使其工作的尝试。
-
请展示您的尝试。你有一个
std::vector<Shape*>?
标签: c++ class inheritance vectorization subclass