ban*_*era 1 c++ polymorphism virtual clone
我正在研究抽象类的东西.
#include <iostream>
#include <vector>
using namespace std;
class Shape
{
protected:
int m_size;
public:
int getSize() { return m_size; }
virtual bool isEqual(Shape *rhs) = 0;
};
Run Code Online (Sandbox Code Playgroud)
这是派生类之一:
class Circle : public Shape
{
public:
Circle(int size) { m_size = size; }
bool isEqual(Shape *rhs)
{
Circle* circle = dynamic_cast<Circle*>(rhs);
if(circle == 0)
return false; // not a Circle
return m_size == circle->getSize();
}
};
Run Code Online (Sandbox Code Playgroud)
我将所有形状存储在一个容器中(基本上是一个形状指针的向量).
class Container
{
private:
vector<Shape*> v;
public:
~Container()
{
for(int i = 0; i < v.size(); i++) {
cout << "Removind element Nr. " << i << endl;
delete v[i];
}
v.erase(v.begin(), v.end());
}
bool add(Shape *shape)
{
for(int i = 0; i < v.size(); i++) {
if( v[i] == shape ) {
return false;
}
if( v[i]->isEqual(shape) ) {
return false;
}
}
v.push_back(shape);
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以在容器中添加元素而不将它们作为指针传递.目前它的工作原理如下:
Container c;
c.add(new Circle(10));
Run Code Online (Sandbox Code Playgroud)
我想以这种方式使用它:
C.add(Circle(10));
Run Code Online (Sandbox Code Playgroud)
什么是解决方案?