我很好奇是否可以Base* base
在课堂上的以下程序中Container
替换为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;
}