我有这个功能
# include "Rectangle.hh"
# include "Circle.hh"
void inst_obj (int symbols) {
for (int i=0; i<symbols ; i++) {
if (i<10) {
Rectangle symb(1,2,3);
//Store symb in an array, like symb_array[i] = symb;
}
else {
Circle symb(1,2,3,4);
//Store symb in an array, like symb_array[i] = symb;
}
}// inst_obj
然后我有另一个功能:
void check_symbols(symbols) {
for (int i=0; i<symbols; i++) {
// Check symbol objects, like symb_array[i].return_something
}
} // check_symbols
如何以简单的方式存储指向不同对象的指针? (然后你如何访问它们?)
答案 0 :(得分:2)
您可以返回指针向量,该向量指向inst_obj
以外的基础对象,并将其传递给check_symbols()
函数。像这样:
// assume Shape is base type of Rectangle and Circle
std::vector<std::unique_ptr<Shape>> inst_obj (int symbols)
{
std::vector<std::shared_ptr<Shape>> v;
for (int i=0; i<symbols ; i++)
{
if (i<10)
{
v.push_back(std::unique_ptr<Shape>(new Rectangle (1,2,3)));
}
else
{
v.push_back(std::unique_ptr<Shape>(new Circle (1,2,3,4)));
}
return v;
}
void check_symbols(std::vector<std::unique_ptr<Shape>>& v)
{
for(auto it = v.begin(), it != v.end(); ++it)
{
// Check symbol objects, like symb_array[i].return_something
}
}
用法:
std::vector<std::unique_ptr<Shape>> v = inst_obj(43);
check_symbols(v);
答案 1 :(得分:0)
您可以创建基类Shape
,使Rectangle
和Circle
继承该类,并使您的数组类型为Shape *
。
此数组可以保存指向Rectangle
和Circle
个对象的指针,因为它们都是Shape
个对象。
答案 2 :(得分:-1)
您可以将继承用于此目的。
有一个基类Shape(最好是一个带有纯虚方法的抽象类,比如draw()等)。从Shape中继承Rectangle,Circle和其他形状。
Shape的数组或向量可以保存从Shape类继承的任何对象的实例。
我们需要使用一个指向Shape的指针数组来使多态性正常工作。