创建一个实例化类的数组 - 语法

时间:2013-10-11 10:30:16

标签: c++

我有这个功能

# 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

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

3 个答案:

答案 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,使RectangleCircle继承该类,并使您的数组类型为Shape *

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

答案 2 :(得分:-1)

您可以将继承用于此目的。

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

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

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