C++操作符重载(operator)
c++操作符
例如-=+*/等,甚至包括,<<等都是操作符。c++特色之一就是给予完全重构和重载操作符(Java不可以,c#操作部分)。
例子入手
假设一个结构体,定义如下
struct Vector2
{
float x, y;
Vector2(float x, float y)
:x(x),y(y){}
}
现在有如下两个定义
Vector2 position(4.0f, 4.0f);
Vector2 speed(0.5f, 1.5f);
我想实现两个结构体相加(即x+x,y+y)如何实现?
Ⅰ 定义一个方法
我们可以定义一个方法。
Vector2 add(const Vector2& other)const
{
return Vector2(x + other.x, y + other.y);
}
Ⅱ 操作符重载
我想实现例如外部仅需position+speed
就可以实现结构体相加,如何?
当然可以,操作如下
Vector2 add(const Vector2& other)const
{
return Vector2(x + other.x, y + other.y);
}
Vector2 operator+(const Vector2& other)const
{
add(other);
}
此时使用+完全合法
使用控制台打印结构体/类
依旧有两个方法,我们可以在结构体内部定义此方法。如果想在外部直接打印的话会出现如下结果。
std::cout << speed << std::endl
这是因为cout只能输出普通类型,这时就要对<<进行重载。
重载函数如下
std::ostream& operator<<(std::ostream& stream, const Vector2& other)
{
return stream << other.x << "," << other.y ;
}
ostream一般都作为对操作符重载使用
C++操作符重载(operator)的更多相关文章
- 操作符重载operator
发现一篇好文: 转载: http://www.cnblogs.com/xiehongfeng100/p/4040858.html #include <iostream>#include & ...
- C++ 操作符重载 (operator)
重载不能改变操作符的优先级 如果一个内建操作符是一元的,那么所有对它的重载仍是一元的.如果是二元的重载后也是二元的 下面看一个有代表性的例子:: 头文件Complex.h: #includeusing ...
- C++ 类型转换操作与操作符重载 operator type() 与 type operator()
类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换.转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的 ...
- 15.C++-操作符重载
首先回忆下以前学的函数重载 函数重载 函数重载的本质为相互独立的不同函数 通过函数名和函数参数来确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的函数重载 ...
- 15.C++-操作符重载、并实现复数类
首先回忆下以前学的函数重载 函数重载 函数重载的本质为相互独立的不同函数 通过函数名和函数参数来确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的函数重载 ...
- [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)
operator overloading(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...
- C++ operator overload -- 操作符重载
C++ operator overload -- 操作符重载 2011-12-13 14:18:29 分类: C/C++ 操作符重载有两种方式,一是以成员函数方式重载,另一种是全局函数. 先看例子 # ...
- C++的重载操作符(operator)介绍(转)
本文主要介绍C++中的重载操作符(operator)的相关知识. 1. 概述 1.1 what operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将 ...
- C++操作符重载总结operator(小结 更新ing)
操作符重载一个原则是:被操作的数据类型中 至少有一个是自定义的类型(使用class定义类),如果被操作的变量都是基本类型,那么就不能定义操作符重载. 1.如果重载了new,则必须重载delete,因为 ...
- C++ 友元(friend关键字)、类中的重载、操作符重载(operator关键字)
C++ 中友元的用法: 1.在类中使用friend关键字声明 2.类的友元可以是其它类或者具体函数 3.友元不是类的一部分 4.友元不受类中访问级别的限制 5.友元可以直接访问具体类中的所有成员. 友 ...
随机推荐
- 和 ChatGPT 聊聊 .NET 编译和执行背后的那些事儿
1 .NET 编译.构建.执行涉及到哪些概念 在 .NET 编译.构建和执行中,涉及到以下概念: C# 或 Visual Basic .NET 等编程语言: 这些是 .NET Framework 使用 ...
- Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目
Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目 每博一文案 有句谚语说:"一怒之下踢石头,只有痛着脚趾头." 比一件糟糕的事情更可拍的,是你用糟糕的态度 ...
- 深入 Django 模型层:数据库设计与 ORM 实践指南
title: 深入 Django 模型层:数据库设计与 ORM 实践指南 date: 2024/5/3 18:25:33 updated: 2024/5/3 18:25:33 categories: ...
- docker-compose搭建的Mysql主主复制
注意下面几点: 1)要保证同步服务期间之间的网络联通.即能相互`ping`通,能使用对方授权信息连接到对方数据库(防火墙开放3306端口). 2)关闭selinux. 3)同步前,双方数据库中需要同步 ...
- 07. C语言程序执行流程控制
[有条件执行语句] if esle 语句 if else 语句根据一个条件确定是否执行一段代码,执行条件是一个布尔值,布尔值为true则执行,为false则不执行,同时可以设置不符合条件时执行的语句. ...
- fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器
fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器 从繁琐到简单,简洁好用的海报生成器 我很高兴向大家推荐一款令人兴奋的工具--Fastposter海报生成器.作为一名开发者,我 ...
- python教程3.1:数据类型:字符串+列表list
一.字符串 字符串是⼀个有序的字符的集合,⽤于在计算机⾥存储和表示⽂本信息 常用方法--str.fun() 全局函数 二.列表list []内以逗号分隔,按照索引,存放各种数据类型,每个位置代表⼀个 ...
- WPF,Frame控件的一个BUG
我使用WPF默认的frame <Frame Style="{DynamicResource FrameStyle1}" x:Name="frame" He ...
- Java面试题:SpringBoot异常捕获,让程序“免疫”一切错误!
在Spring Boot应用程序中,捕获全局异常是一个重要的方面,它可以帮助我们处理在应用程序运行时可能发生的各种错误情况.通过适当地捕获和处理这些异常,我们可以改善用户体验并及时采取必要的措施. 使 ...
- linux分区规划
一般来说,对系统进行分区,需要提前规划好: 系统分区:如果资源允许的话,建议300G(该分区只存放操作系统和一些配置文件等): /boot分区:是引导分区(该分区损坏,系统就启动不了了),在b ...