所以我在C++中遇到了一个叫做虚函数的东西,简而言之就是我所理解的用于在派生/子类中启用函数重载的东西.
所以我们有以下课程:
class MyBase{
public:
virtual void saySomething() { /* some code */ }
};
Run Code Online (Sandbox Code Playgroud)
那么当我们创建一个继承MyBase的新类时,如下所示:
class MySubClass : public MyBase{
public:
void saySomething() { /* different code than in MyBase function */ }
};
Run Code Online (Sandbox Code Playgroud)
MySubClass中的函数将执行自己的saySomething()函数.
要理解它,是否与Java相同,只需在派生类中编写相同的函数名称即可实现相同的功能,这将自动覆盖/重载它?
在C++中实现的目标是什么,你需要额外的步骤,即将基类中的函数声明为虚拟?
先感谢您!:)
是的,你是对的.在Java中,所有函数都是隐式虚拟的.在C++中,您可以选择:为了使函数成为虚拟函数,您需要在基类中将其标记为这样.(有些人也在派生类中重复虚拟关键字,但这是多余的).
在c ++中,虚拟功能带来了成本.为了能够提供多态,重载等,您需要将方法声明为虚拟.
由于C++关注程序的布局,virtual关键字会带来开销,这可能是不可取的.Java被编译为字节码并在虚拟机中执行.C++和本机汇编代码直接在CPU上执行.这使您(开发人员)有可能完全理解和控制代码在汇编程序级别(在优化等之后)的外观和执行方式.
virtual在C++类中声明任何内容都会为vtable每个类创建一个条目,在该类上完成整个重载操作.
还有编译时多态性和模板,可以减轻vtable和解决开销,它有自己的问题和可能性.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |