C++ 从c+中的超类数组访问子类方法+;?

C++ 从c+中的超类数组访问子类方法+;?,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,我有一个名为事务的超类,它有以下方法: 类型 指南 顾客 然后名为Order的子类具有以下方法: 项目 数量 成本 所以订单继承自事务 我的问题是可以有多种类型的交易。。。订单、付款等 因此,我持有数组中的每种类型的事务,如下所示: Transaction trans[100]; trans[0] = Order order(val,val,val); trans[1] = Order order(val,val,val); trans[2] = Order order(val,val

我有一个名为事务的超类,它有以下方法:

  • 类型
  • 指南
  • 顾客
然后名为Order子类具有以下方法:

  • 项目
  • 数量
  • 成本
所以订单继承自事务

我的问题是可以有多种类型的交易。。。订单、付款等

因此,我持有数组中的每种类型的事务,如下所示:

Transaction trans[100];
trans[0] = Order order(val,val,val);
trans[1] = Order order(val,val,val);
trans[2] = Order order(val,val,val);
...
但是现在当我调用
trans[3]时,Get_item()我得到一个错误,即
事务类没有方法get\u item
,是的,它没有,但它所持有的东西有

我曾尝试将数组设置为指针数组,并使用
->
运算符进行访问。但问题依然存在

真实代码:

vector<Transaction *> trans;
....
Order order(words[0], words[1], words[2], words[3], words[4], words[5]);
trans.push_back(&order);
....
trans[i]->Getitem(); //error here.
矢量变换;
....
顺序(字[0]、字[1]、字[2]、字[3]、字[4]、字[5]);
事务处理推回(和订单);
....
trans[i]->Getitem()//这里有错误。

类似于
事务传输[100]的数组不能保存事务的子类,只能保存事务本身。如果希望数组包含任意事务子类,则创建一个指针数组(原始与否无关紧要)。带有向量和原始指针的示例:

std::vector<Transaction *> t;  
t.push_bask(new Transaction()); //insert constructor params if necessary params 
t.push_bask(new Order());  
t[0]->getType();
t[1]->getType();
...
//and don't forget delete, or use smart pointers.

在某些(并非所有)情况下,dynamic_cast可以帮助测试某些类型。

类似于
Transaction[100]的数组不能保存事务的子类,只能保存事务本身。如果希望数组包含任意事务子类,则创建一个指针数组(原始与否无关紧要)。带有向量和原始指针的示例:

std::vector<Transaction *> t;  
t.push_bask(new Transaction()); //insert constructor params if necessary params 
t.push_bask(new Order());  
t[0]->getType();
t[1]->getType();
...
//and don't forget delete, or use smart pointers.

在某些(并非所有)情况下,动态强制转换有助于测试某些类型。

另请参见:,您如何知道
trans[i]
指向
订单(而不是
付款
),并且
GetItem()
调用它是有意义的?如果向量中的所有事务实际上都是订单,则存储
Order*
的向量。如果不是所有的都是,那就回到“你打算怎么知道哪个是哪个”?事实上我又看了一遍,我在交易中存储了类型参见:,你怎么知道
trans[i]
指向一个
订单(而不是说,
付款
),对它的
GetItem()
调用是有意义的?如果向量中的所有事务实际上都是订单,则存储
Order*
的向量。如果不是所有的都是,那就回到“你打算怎么知道哪个是哪个”?实际上我又看了一遍,我正在事务中存储类型。你能发布一些示例代码吗?我确实做了指向指针的标记,也是向量向量trans;`然后
trans[i]->Getitem()
在Trasnaction中存储类型不起作用,所以我应该能够使用顺序转换如果你能用getType发现它是否是一个顺序,那么它就没问题了,问题解决了。顺便说一句,问题中的最后一个代码示例有一个指向局部变量的指针,它可能在向量生成之前就消失了。小心点。@MuhammadUmer如果在事务向量中插入一个订单(没有指针),订单对象将使用Transaction=>的复制构造函数进行复制,向量中的内容是纯事务,没有其他内容。(对于指针,只有指针地址被复制)你能发布一些示例代码吗……我确实做了指向指针的代码,它也是向量向量trans;`然后
trans[i]->Getitem()
在Trasnaction中存储类型不起作用,所以我应该能够使用顺序转换如果你能用getType发现它是否是一个顺序,那么它就没问题了,问题解决了。顺便说一句,问题中的最后一个代码示例有一个指向局部变量的指针,它可能在向量生成之前就消失了。小心点。@MuhammadUmer如果在事务向量中插入一个订单(没有指针),订单对象将使用Transaction=>的复制构造函数进行复制,向量中的内容是纯事务,没有其他内容。(对于指针,仅复制指针地址)