我对虚拟函数感到困惑。有人告诉我,父类中的虚拟意味着我可以在子类中覆盖它。但是,如果我省略父类中的虚拟,我仍然可以覆盖它。
#include <iostream>
using namespace std;
class Enemy{
public:
//if I remove virtual, it still gets overriden in child class
virtual void attack(){
cout << "Attack Enemy!" << endl;
}
};
class Minion : public Enemy {
public:
void attack(){
cout << "Attack Minon!" << endl;
}
};
int main() {
Minion m;
m.attack();
}
您没有覆盖它,您只是添加了另一个具有相同签名的方法。
Enemy* enemy = new Minion();
enemy->attack();
delete enemy;
如果这调用了Minion
的代码,那么您就做对了。如果它调用了敌人
的代码,那么你做错了。您需要虚拟
才能正确执行。
您可以覆盖正在讨论的方法,最好用< code>override关键字声明该方法,以允许编译器在您没有覆盖任何内容时发出抱怨。
class Enemy {
public:
virtual ~Enemy() = default; /* Don't forget... or non-virtual protected. */
virtual void attack() {}
};
class Minion : public Enemy {
public:
void attack() override {}
};
您的困惑可能源于这样一个事实,即您同样可以很好地隐藏基类方法。
class Enemy {
public:
virtual ~Enemy() = default;
void attack() {}
};
class Minion : public Enemy {
public:
void attack() {}
};
这不仅做了一些不同的事情,而且是非常糟糕的命名的一个例子,因为它使读者感到困惑:在类层次结构的上下文中,具有相同签名的相同成员函数名不可避免地与重写的方法相关联。
如果函数是虚拟的,则在运行时通过vtable将调用动态地分派给派生类型提供的实现,而如果没有,编译器将在编译时查看对象并选择静态类型的类方法。如果您有一个指向基类的指针,这意味着如果函数不是虚拟的,则使用基实现:
敌人 *e = 新小黄人(); e-
将打印“攻击敌人!”如果
攻击
不是虚拟的。当使用虚拟函数时,编译器将插入一些逻辑以在运行时查找正确的实现,当<code>e-
如果要强制派生类重写基类方法,还可以使用
虚拟无效攻击()=0;
不能将“virtualenv”识别为内部或外部命令、可操作程序或批处理文件。 我正在遵循的步骤 在默认目录下安装-pip安装virtualenv 要创建一个venv,请运行此virtualenv-p python3 venv 激活virtualenv\Scripts\Activate 它看起来像这样(venv)
虚拟化 [PV_OPS] noreplace-paravirt 禁止使用内核通用的半虚拟化接口paravirt_ops,主要用于解决某些在Virtual PC上安装或运行Linux的故障。 [VMMIO] virtio_mmio.device=size@baseaddr:irq[:id] 实例化virtio-mmio设备(CONFIG_VIRTIO_MMIO)。可以多次使用以实例化多个设备。 si
查看虚拟机相关的监控告警信息。 监控菜单下的虚拟机页面主要用于查看虚拟机相关的监控告警信息。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “监控/资源/虚拟机” 菜单项,进入虚拟机页面。 查看虚拟机列表 该功能用于查看虚拟机的监控告信息。 在虚拟机页面,支持查看以下信息: 名称:虚拟机的名称。 IP:虚拟机的IP地址。 监控状态:虚拟机是否设置告警以及发生告警。 状态:虚拟机的当
主机回收站用于存放用户删除的虚拟机和裸金属文件。 主机回收站用于存放用户删除的虚拟机和裸金属文件。回收站中主机文件默认保存3天,如有误删除的主机需要在3天内进行恢复操作,可以将其恢复到原来位置,超过3天后,文件将被彻底删除。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “主机/回收站/主机” 菜单项,进入主机回收站列表。 清除 当确定回收站中的主机无用后,可使用清除功能立即彻底删
虚拟机是采用虚拟化技术构建的运行在宿主机上的虚拟机实例。 虚拟机是采用虚拟化技术构建的运行在宿主机上的虚拟机实例,包括CPU、内存、操作系统、硬盘、网卡等完整的虚拟硬件基础环境。 虚拟机来源: 当云管平台对接其他平台云账号后,将会自动同步其他平台上的虚拟机到云管平台上进行管理。 新建虚拟机。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “主机/主机/虚拟机” 菜单项,进入虚拟机页
TJS2 は、スクリプトをいったん仮想マシン (TJS2 VM) 用のバイナリコードにコンパイルしてから実行します。 例外が発生したときやダンプを行ったときにこの TJS2 VM のコードの逆アセンブル結果が表示されるので、この仮想マシンについて簡単に説明します。 命令コード TJS2 VM は関数やプロパティなどの実行単位ごとに独立していて、ある一つの関数が他の関数と命令コード空間、レジス