请考虑以下代码:
class Base
{
protected:
virtual void methodDefinedInBase() = 0;
}
Class Derived: private Base
{
public:
void someMethod();
protected:
virtual void methodDefinedInBase()
{
std::cout<<"From B"<<std::endl;
}
}
在上面的代码中,我可以创建“Derived”类型的对象。 C ++允许我从Derived类中的“someMethod()”访问方法“methodDefinedInBase()”。但是,如何创建“Base”类型的对象?
谢谢,
毗
答案 0 :(得分:3)
正如Beta在评论中指出的那样,您无法实例化抽象基类(使用纯虚方法的基类)。您只能实例化实现这些纯虚方法的派生类。无论您是使用公共继承还是私有继承,都是如此。
答案 1 :(得分:1)
你不创建“Base”类型的任何对象 - 通过给Base一个纯虚拟成员,你明确地说这个类本身不能存在,而只能通过派生类存在。你想要创建的是指针或引用到Base:
Derived1 x;
Derived2 y;
// Somewhere inside Derived1:
Base & rb = x;
// Somewhere inside Derived2:
Base * pb = &y;
然后,您可以通过统一处理rb
和pb
来使用多态,而无需了解x
和y
的具体类型。
答案 2 :(得分:0)
基类中纯虚函数的声明意味着:1。此类的对象无法实例化。 2.要实例化派生类的对象,必须定义所有纯虚函数。换句话说,纯虚方法不允许您创建一个定义的类的对象。