浅谈C++虚重载操作符 virtual operator= 的使用方法
发布时间 - 2026-01-10 22:22:18 点击率:次C++中虚操作符和其他虚函数的规则一样,操作符可以为虚函数,进行动态绑定, 虽然这种情况并不多见。本文以赋值操作符operator=举例。

派生类中要重定义基类虚函数,要注意参数必须为基类引用类型,否则与基类中虚函数是完全不同的,无法进行预期的动态绑定。
派生类除了重定义基类的虚操作符,还要定义自身的操作符重载。即派生层次每增加一层,理论上派生类就需要多定义一个操作符重载。
以下程序使用引用reference,通过指针调用赋值操作符(例:*p = value)情况是一样的。
#include <iostream>
using namespace std;
class Base
{
public:
virtual Base& operator=(const Base& rhs) //重载操作符可设为virtual
{
cout << "Base" << endl;
return *this;
}
};
class Derived : public Base
{
public:
//与基类的operator=完全不同,不是重新定义,不会动态绑定。
//如果不定义该操作符,会自动合成一个,并自动调用基类的operator=,不会动态绑定
Derived& operator=(const Derived& rhs)
{
cout << "Derived_D" << endl;
return *this;
}
//重新定义基类的operator=,会动态绑定
//virtual Base& operator=(const Base& rhs) //返回值两种都可以
virtual Derived& operator=(const Base& rhs)
{
cout << "Derived_B" << endl;
return *this;
}
};
class Derived2 : public Derived
{
//此类需要3个operator=
//可定义private的copy函数,由3个operator=调用
//可使用dynamic_cast将基类引用参数转为子类,并捕获异常。
//如果未发生异常,则调用copy,发生异常则不需赋值
};
int main()
{
Base b1, b2;
Derived d1, d2;
Derived &rd = d1;
Base &rb1 = b1; //动态类型为Base
Base &rb2 = d2; //动态类型为Derived
rb1 = d1; //输出"Base"
rb2 = d2; //输出"Derived_B"
rb1 = rb2; //输出"Base"
rb2 = rb1; //输出"Derived_B"
rd = d1; //输出"Derived_D"
rd = b1; //输出"Derived_B"
getchar();
return 0;
}
以上就是小编为大家带来的浅谈C++虚重载操作符 virtual operator= 的使用方法全部内容了,希望大家多多支持~
# operator
# 操作符
# 等于
# C++超详细讲解数组操作符的重载
# 详解C++赋值操作符重载
# C++-操作符重载、并实现复数类详解
# C++ 开发之实现操作符重载的实例
# C++ 基础编程之十进制转换为任意进制及操作符重载
# C++中的三大函数和操作符重载(Boolan)
# C++中的操作符重载详细解析
# C++输入输出操作符重载的深入分析
# C++超详细讲解操作符的重载
# 绑定
# 派生类
# 子类
# 两种
# 设为
# 要注意
# 此类
# 这种情况
# 不需
# 浅谈
# 理论上
# 小编
# 中要
# 大家多多
# 返回值
# 类中
# 多见
# 是一样的
# amp
# iostream
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
Laravel怎么调用外部API_Laravel Http Client客户端使用
Angular 表单中正确绑定输入值以确保提交与验证正常工作
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
如何在 React 中条件性地遍历数组并渲染元素
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
深圳网站制作培训,深圳哪些招聘网站比较好?
高防服务器租用指南:配置选择与快速部署攻略
进行网站优化必须要坚持的四大原则
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何做网站制作流程,*游戏网站怎么搭建?
JS弹性运动实现方法分析
北京专业网站制作设计师招聘,北京白云观官方网站?
如何撰写建站申请书?关键要点有哪些?
JavaScript Ajax实现异步通信
详解Android图表 MPAndroidChart折线图
Laravel Docker环境搭建教程_Laravel Sail使用指南
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何安全更换建站之星模板并保留数据?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
如何用PHP快速搭建CMS系统?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
Firefox Developer Edition开发者版本入口
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
js实现点击每个li节点,都弹出其文本值及修改
手机软键盘弹出时影响布局的解决方法
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
教你用AI润色文章,让你的文字表达更专业
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
Python3.6正式版新特性预览
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Laravel如何配置任务调度?(Cron Job示例)
使用spring连接及操作mongodb3.0实例
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何用美橙互联一键搭建多站合一网站?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
HTML 中动态设置元素 name 属性的正确语法详解
上一篇:yii2怎么显示错误提示
下一篇: 在线制作片头的网站,怎么做视频的片头?
上一篇:yii2怎么显示错误提示
下一篇: 在线制作片头的网站,怎么做视频的片头?

