关于c++中的继承,派生类是否可以在不显式定义基类的情况下从基类获得实现
about inheritance in C++, can a derived class get implemetation from base class without explicitly defining it
下面有错误
外部符号"public: virtual void __thiscall C::Foo(void)"无法解析(? Foo@C@@UAEXXZ)
所以基本上C::Test()
不能自动继承B::Test()
的实现,我们必须每次都用c++显式地写它?
class A
{
public:
virtual void Foo()=0;
virtual void Test()=0;
};
class B: public A
{
public:
virtual void Foo();
virtual void Test()=0;
};
void B::Foo()
{
}
class C: public B
{
public:
void Foo();
void Test();
};
void C::Test()
{
}
如果您的派生类从父类声明了一个虚方法,就像C
对void Foo()
所做的那样,那么它也必须实现它。如果你想继承B
的实现,那么不要在C
中声明void Foo()
。
class C: public B
{
public:
void Test();
};
您已经将A::Test()设置为纯虚的,因此子类必须实现它。
这就是A::Test()=0
语法的含义。
如果删除=0
,并在父类中提供实现,则不需要在子类中实现它。
您只需要在抽象基类中使用纯虚函数来进行动态绑定。
编辑:我很确定你需要实现所有的功能,即使它们是空的。这就是为什么它不能为你编译。class A
{
public:
virtual void Foo()=0;
virtual void Test()=0;
};
class B: public A
{
public:
void Foo();
void Test();
};
void B::Foo()
{
}
void B::Test()
{
}
class C: public B
{
public:
void Foo();
void Test();
};
void C::Foo()
{
}
void C::Test()
{
}
相关文章:
- 如何定义一个纯抽象基类
- 使用子类覆盖基类中定义的函数
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 使(虚拟)函数在大多数派生类中无法访问中间基类中可访问,定义良好?
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- 基类可以声明虚拟方法但不定义它吗?仍然在派生类中定义
- 错误:基类在从基类父派生类 Son 时未定义
- 无法使用在子类中定义的虚拟getter实现基类
- 如何在基类中定义静态接口,并确保该接口必须在派生类中实现
- Qt基类函数定义
- 当在基类中定义枚举时,qml中的Q_ENUM未定义值
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- C++未定义的基类
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 为什么不允许在非推导上下文中使用基类定义,以及如何解决这个问题
- CRTP和基类定义的类型的可见性
- 从继承的虚拟基类定义纯虚拟函数
- 当我使用根据基类定义的成员函数指针时,编译器如何调用派生成员函数?
- 派生类通过基类定义函数