3 回答
TA贡献1806条经验 获得超5个赞
您不能实例化抽象类,因此抽象类的向量不能工作。
但是,您可以使用指向抽象类的指针向量:
std::vector<IFunnyInterface*> ifVec;
这也使您可以实际使用多态行为-即使该类不是抽象的,按值存储也会导致对象切片的问题。
TA贡献1911条经验 获得超7个赞
您无法创建抽象类类型的向量,因为您无法创建抽象类的实例,并且诸如std :: vector之类的C ++标准库容器将存储值(即实例)。如果要执行此操作,则必须创建一个指向抽象类类型的指针向量。
您的工作流程将无法正常工作,因为虚函数(这就是您首先要抽象类的原因)仅在通过指针或引用调用时才起作用。您也不能创建引用向量,因此这是您必须使用指针向量的第二个原因。
您应该意识到C ++和C#几乎没有共同之处。如果您打算学习C ++,则应该从头开始,并阅读专门的C ++教程,例如Koenig和Moo的Accelerated C ++。
TA贡献1777条经验 获得超3个赞
在这种情况下,我们甚至不能使用以下代码:
std::vector <IFunnyInterface*> funnyItems;
要么
std::vector <std::tr1::shared_ptr<IFunnyInterface> > funnyItems;
因为FunnyImpl和IFunnyInterface之间没有IS A关系,并且由于私有继承,FUnnyImpl和IFunnyInterface之间也没有隐式转换。
您应该按照以下方式更新代码:
class IFunnyInterface
{
public:
virtual void IamFunny() = 0;
};
class FunnyImpl: public IFunnyInterface
{
public:
virtual void IamFunny()
{
cout << "<INSERT JOKE HERE>";
}
};
- 3 回答
- 0 关注
- 423 浏览
添加回答
举报