VC++之运算符重载简单小结
封装继承和多态是面向对象三大基本支柱。
在面向对象系统中有两种编译方式:静态联编和动态联编
静态联编:也叫早期联编:指系统在编译时就决定如何实现某一动作,提供了执行速度快的优点。
动态联编:也叫滞后联编:指系统运行时动态实现某一动作,它提供了灵活和高度问题抽象的优点。
C++ 支持两种多态性:编译时的多态性和运行时的多态性。
编译时的多态性通过重载来获得,而重载有包含函数重载和运算符重载。
运行时的多态性通过使用继承和虚函数来获得。
===================================运算符重载=============================================
1.运算符重载有何意义?
当你定义一个新的Class的时候,同时需要定义能够作用他的操作,这时就需要运算符重载来实现:
比如: class A{.....};
A b ,c d;
d = b+c;//编译时报错,因为并没有定义关于类型A的+操作。
A A::operator+(A f){};
d= b+c;//这样就对了
//其实,如果觉得不习惯,完全可以编写函数来实现相关操作,并调用函数。比如;d=b.add(c);
运算符重载实际上是一个特殊函数的重载,本质上任何一个运算符底层还是一个函数。
运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生
2.C++中除了以下五个运算符不能重载剩余都可以重载:
成员访问符:“.”
作用域运算符:“::”
条件运算符:“ ? : ”
成员指针运算符:“*”
编译预处理命令的开始符:“#”
3.运算符重载时需要注意的问题:
运算符的优先级和结合性不能改变
程序员并不能创造出新的运算符
重载功能与原功能类似,而且,不能改变运算符操作数据的个数,至少有一个操作数是自定义类型的操作数。
4.运算符重载有两种形式: 以成员函数的形式,以友元函数的形式
--------------> 成员函数的重载:<-----------------------------
注意:若重载的运算符为一元的那么参数列表为空,如果为二元的那么参数列表中有一个操作数。以此类推。
operator是运算符重载中必不可少的关键字。
比如:String operator+(const String &a);class内申明
String String::operator(const String &a){....};体外定义
String demo3 = demo1+demo2;<==等价于==>String demo3=demo1.operator+(demo2);
//详细代码参见:书籍P125~129《课本》。
--------------->友元函数的重载<-----------------------------------
友元函数与成员函数 的重载最大的区别在于:参数列表个数的不同
友元函数不属于任何一个类,故没有this指针,所以它重载运算符时:运算符为一元的那么参数列表里需要一个
操作数,为二元时那么需要两个参数。
友元运算符的重载可以返回任何一个类型,但是通常返回与它的操作类型相同的类型。
注意:有些运算符我们既可以采用成员函数的形成重载当然也可以以友元函数的形式重载,但是有一种情况只能使用友元函数来进行重载:
当运算符的左操作数是一个常数时,不能利用this指针,就必须使用友元重载。
5.常见运算符的重载:
注意前自增和后自增表达式的区别:
price operator++()//这是前自增
price operator++(int)//这是后自增
VC++之运算符重载简单小结的更多相关文章
- C++运算符重载(简单易懂)
转载:https://www.cnblogs.com/liuchenxu123/p/12538623.html 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型. 你 ...
- C++运算符重载的妙用
运算符重载(Operator overloading)是C++重要特性之中的一个,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用.详细包含重载operator<<,o ...
- C#高级编程笔记2016年10月12日 运算符重载
1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...
- PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天
PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数 1 构造 2 析构 3 赋值 4 拷贝构造 5 oper ...
- 我的c++学习(8)运算符重载和友元
运算符的重载,实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该运算符时就调用此函数来行使运算符功能.这个函数叫做运算符重载函数(常为类的成员函数). 方法与解释 ◆ 1.定义运 ...
- C# 类型运算符重载在类继承中的调用测试
这是一篇晦涩难懂的片面的研究 一,简单的继承层次 class CA { } class CB : CA{ } class CC : CB{ } } void Test(CA oa){//CATest ...
- 【C++】运算符重载
运算符重载,主要是简化类类型运算,能够让我们对类对象直接用运算符进行运算.基本语法: 类型 operator 运算符(参数列表){ ... } Complex operator+(Complex va ...
- Java longTime 和C#日期转换(结构+运算符重载)
前几天,因为工作原因,连到了公司的一个java系统.查看数据的时候,突然整个人都不好了,数据库中日期字段时间为毛都是整型?之前从来没有接触过java,所心就趁机了解了一下.原来,在数据库中,保存的是j ...
- C++:运算符重载函数
5.运算符重载 5.1 在类外定义的运算符重载函数 C++为运算符重载提供了一种方法,即在运行运算符重载时,必须定义一个运算符重载函数,其名字为operator,后随一个要重载的运算符.例如,要重载& ...
随机推荐
- MongoDB 和 Mongoose 04
一.安装 1. 相关 https://www.mongodb.org/dl/win32/ MongoDB的版本偶数版本为稳定版,奇数版本为开发版 MongoDB对于32位系统支持不佳,所以3.2版本以 ...
- windows 平台下 安装解密 openssl
1 在openssl 官网下载 openssl 安装, 本机是 64位 win 8.1 系统 http://slproweb.com/products/Win32OpenSSL.html 下载:Win ...
- 第一次接触mysql
一:数据库的好处 1. 可以持久化保存数据在本地 2.结构化查询 二:数据库常见的概念 1.DB: 是datebase数据库的缩写,储存数据得到容器 2.DBMS:数据库管理系统,用于管理数据库,和创 ...
- MySql使用入门
SQL是Structure Query Language(结构化查询语言)的缩写. SQL主要可以分为三个类别: 1.DDL(Data Definition Languages)语句:数据定义语言,这 ...
- qt项目:员工信息管理系统
开发一个员工信息管理系统 一.项目具体要求: 1.用qt开发界面,数据库用QSqlite 数据库文件名:demostudent.db 2.通过界面能够查看到数据库中员工信息表中内容,包括员工姓名.年龄 ...
- ABAP术语-Function Builder
Function Builder 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/03/1063196.html Tool for creat ...
- HDFS学习总结
1.什么是Hadoop 管理网络中跨多台计算机存储的文件系统称为分布式文件系统面临的挑战:使文件系统能容忍节点故障且不丢失任何数据不适合的特点:低时间延迟的数据访问&大量的小文件&多用 ...
- CDN初识
CDN 全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络,通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层 ...
- 如何在linux系统内用openssl 生成 过期的证书
需求:验证过期的证书在系统中不能使用. 问题:如何生成过期的证书呢? 解决方法:1.调整系统时间 2.生成证书 3.验证证书startdate 和 enddate 是否符合你的预期 1.调整系统时间 ...
- Java OOP——第四章 异常
1. 接口:接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来. 接口是更加抽象的抽象的类, 抽象类里的方法可以有方法体, 接口里的所有方法都没有方法体. ...