【发布时间】:2013-04-03 00:14:33
【问题描述】:
好久没用过这个c++特性了,暂时忘记了。假设我有一个名为“object”的类和一个从“object”公开派生的类“button”。
现在,假设我有一个向量 a,或者一个 hash_map a。我能否在其中添加“按钮:”类型的对象?或者实际上是从“对象”公开派生的任何其他类对象。我该怎么做?
谢谢
【问题讨论】:
标签: c++ class inheritance polymorphism
好久没用过这个c++特性了,暂时忘记了。假设我有一个名为“object”的类和一个从“object”公开派生的类“button”。
现在,假设我有一个向量 a,或者一个 hash_map a。我能否在其中添加“按钮:”类型的对象?或者实际上是从“对象”公开派生的任何其他类对象。我该怎么做?
谢谢
【问题讨论】:
标签: c++ class inheritance polymorphism
使用指针向量:
struct Base
{
virtual ~Base() {}
virtual int foo() = 0; // good manners: non-leaf classes are abstract
};
struct Derived1 : Base { /* ... */ };
struct Derived2 : Base { /* ... */ };
struct Derived3 : Base { /* ... */ };
#include <vector>
#include <memory>
int main()
{
std::vector<std::unique_ptr<Base>> v;
v.emplace_back(new Derived3);
v.emplace_back(new Derived1);
v.emplace_back(new Derived2);
return v[0]->foo() + v[1]->foo() + v[2]->foo(); // all highly leak-free
}
【讨论】:
emplace_back 比push_back 有什么优势吗?
make_unique,不幸的是它不存在。
Derived* 到std::unique_ptr<Base> 的显式转换?您能否解释一下 T&& 与 T& 有何不同,或提供链接?