如何解决私有继承:如何使基类的对象具有纯虚方法?
| 考虑以下代码: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 ++允许我从派生类中的\“ someMethod()\”访问方法\“ methodDefinedInBase()\”。但是,如何创建类型为“ Base”的对象?
谢谢,
毗湿奴
解决方法
正如Beta在评论中指出的那样,您不能实例化一个抽象基类(一个具有纯虚方法的类)。您只能实例化实现那些纯虚方法的派生类。不管您使用的是公共继承还是私有继承,都是如此。
, 您不会创建任何类型为“ Base \”的对象-通过为Base提供纯虚拟成员,您明确表示该类本身不能存在,而只能通过派生类存在。您要创建的是指向Base的指针或引用:
Derived1 x;
Derived2 y;
// Somewhere inside Derived1:
Base & rb = x;
// Somewhere inside Derived2:
Base * pb = &y;
然后,可以通过对rb
和pb
进行统一处理来使用多态,而无需了解x
和y
的具体类型。
, 在基类中声明纯虚函数意味着:1.无法实例化此类的对象。 2.要实例化派生类的对象,必须定义所有纯虚函数。换句话说,纯虚拟方法不允许您创建一个已定义类的对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。