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
- 类型
- 指南
- 顾客
- 项目
- 数量
- 成本
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=>的复制构造函数进行复制,向量中的内容是纯事务,没有其他内容。(对于指针,仅复制指针地址)