【发布时间】:2012-08-25 07:53:35
【问题描述】:
我很好奇在下面的程序中Container 类中的Base* base 是否可以替换为Base& base?Base base 不能被替换,因为 Base 是抽象的。
使用Base& base,对象应该被分配到某个地方,所以我仍然无法摆脱指向已分配对象的指针。
#include <iostream>
class Base
{ public:
virtual void str()=0;
};
class A : public Base
{ int i;
public:
A(int i):i(i){}
void str(){std::cout<<i<<std::endl;}
};
class B : public Base
{ double f;
public:
B(double f):f(f){}
void str(){std::cout<<f<<std::endl;}
};
class Container
{ Base *base;
public:
Container(int i) { base=new A(i);}
Container(double f) { base=new B(f);}
void str(){ base->str();}
};
int main ()
{
Container c1(8),c2(13.0);
c1.str();
c2.str();
return 0;
}
【问题讨论】:
-
我觉得这篇文章应该会给你一个答案:stackoverflow.com/questions/7192069/polymorphic-c-references
标签: c++ oop class object abstract-class