Rot*_*tem 3 c++ inheritance virtual-functions
这可能之前已经回答过,但我找不到这些词.
我试图将我的头脑包裹在继承中C++,但是来自C#我似乎无法理解以下案例背后的原因:
Foo.h
class Foo {
virtual void DoSomething();
}
class Bar : Foo { }
Run Code Online (Sandbox Code Playgroud)
Bar.cpp
#include "Foo.h"
void Bar::DoSomething()
{
//Compiler error C2509 - member function not declared in 'Bar'
}
Run Code Online (Sandbox Code Playgroud)
既然DoSomething是一个纯虚函数,那么它是否会被隐含地声明为一部分Bar?
如果我继承了很多不同的类Foo,我真的需要DoSomething在每一个中明确声明吗?
C++处理这种情况还有哪些其他结构?
AnT*_*AnT 10
C++语言建立在与C相同的独立翻译原则之上.这意味着C++程序中的所有翻译单元应该完全相互独立地编译.当编译器本身已经完成工作时,它们将被链接到最终程序中.
在类的情况下,为了能够独立编译每个翻译单元,编译器必须能够通过单独查看类的定义(即通常放在的类中)来构建对给定类的充分理解.头文件.在编译一个翻译单元时,编译器必须知道在某些其他翻译单元中DoSomething覆盖Bar并且该定义void Bar::DoSomething()存在于某处.为了实现这一点,类定义必须包含所有类成员函数的声明.
关于"纯虚函数"的推理对我来说完全不清楚.首先,它在您的代码示例中并不纯粹(显然您只是忘记了= 0部分).其次,仅仅因为基类函数是纯粹的并不意味着派生类函数应该是非纯的.它很可能Bar也应该是一个抽象类.这是你的意图问题,编译器不知道.
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |