1

我有这个功能

# 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

如何以简单的方式存储指向不同对象的指针?(然后你如何访问它们)?

4

3 回答 3

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);
于 2013-10-11T10:39:12.980 回答
0

您可以创建一个基类Shape,同时创建RectangleCircle从该类继承,并创建您的类型数组Shape *

这个数组可以保存指向 RectangleCircle对象的指针,因为它们都是Shape对象。

于 2013-10-11T10:34:20.877 回答
-1

您可以为此目的使用继承。

有一个基类 Shape(最好是一个带有纯虚方法的抽象类,如 draw() 等)。从 Shape 继承矩形、圆形和其他形状。

Shape 的数组或向量可以保存从 Shape 类继承的任何对象的实例。

我们需要使用一个指向 Shape 的指针数组来使多态性正常工作。

于 2013-10-11T10:35:54.920 回答