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)//这是后自增

时间: 2024-11-06 11:39:51

VC++之运算符重载简单小结的相关文章

C++运算符重载简单练习 写一个Integer包装类

// Operator.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string> using namespace std; class Integer { public: //explicit如果添加explicit就不能进行隐式构造 //隐式构造不会导致拷贝构造函数调用 Integer(int num):m_num(num) { } //覆盖了拷贝构造函数

C++运算符重载的妙用

运算符重载(Operator overloading)是C++重要特性之中的一个,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用.详细包含重载operator<<,operator>>支持cin,cout输入输出.重载operator[],实现下标运算.重载operator+=实现元素追加:重载operator()实现函数调用.假设你对C++的运算符重载掌握的游刃有余.那就无需继续往下看了. 运算符重载带来的优点就是--让代码变得简洁.以下将展示几个标准库因使

《C++编程思想》 第十一章 运算符重载 (习题+解答)

一.相关代码 1. /*运算符重载语法*/ /*OPOVER.cpp*/ /*这两个重载的运算符被定义为内联成员函数.对于二元运算符,单个参数是出现在运算符 右侧的那个.当一元运算符被定义为成员函数时,没有参数.成员函数被运算符左侧的对象调 用. 对于非条件运算符(条件运算符通常返回一个布尔值),如果两个参数是相同的类型,希 望返回和运算相同类型的对象或引用.如果它们不是相同类型,它作什么样的解释就取决于程 序设计者.用这种方法可以组合复杂的表达式: K += I + J ; 运算符+号产生一个

Kotlin中复合赋值(+=,-=,……)运算符重载

本篇建立在已经了解了kotlin中运算符重载的理念以及如何实现的基础上. 来我们首先写一个简单的类,然后重载运算符+,+=,-,-=这个几个运算符.代码如下: data class Point(var x: Int, var y: Int) { operator fun plus(point: Point): Point { return Point(this.x + point.x, this.y + point.y) } operator fun plusAssign(point: Poin

关于c++的运算符重载那些事

搞c++有一段时间了,今天突然要重载一个运算符,发现自己有点忘了,遂查查资料做一下c++运算符重载的小总结. 一.何为运算符重载 运算符的重载是c++语言特有的,java什么的是没有运算符重载的,所以运算符重载在笔试面试中有可能成为c++的高频考点.运算符重载就是重新定义运算符的意义,如常用的+,-,×,÷都是可以重载的.运算符重载使用的是关键字operator,表现形式是:                                                            

【C++】运算符重载

这是C++的特色,也是C++比较难的一个基本语法,但是,如果你把运算符重载看成一个特殊的类方法,且这个类方法的名称就是运算符,一切就变得简单了. 下面用一个简单的程序说明这个问题: 声明两个3x3二维矩阵a,b,其实就是Matrix类,里面就用私有的长度为9的一维数组存储数据.只是打印的时候,打成二维数组的样子 实现~a或者~b就能直接打印a与b,也就是~相当于把a,b打印出来,此乃单目运算符重载. 实现a+b,返回另一个相加之后的矩阵c. 也就是说做到如下图的效果: 代码如下: #includ

C#中运算符重载

很多语言都允许程序员使用运算符重载,尽管从编程的角度看,这没有其必要性,但是对于代码来讲可以提高它的可读性,带来许多方便之处.最简单的例子就是,我们用String类的时候,用"+"运算符直接实现字符串的连接,很方便很直观. 运算符重载实例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; namespace impli

C++ Primer笔记12_运算符重载_递增递减运算符_成员访问运算符

1.递增递减运算符 C++语言并不要求递增递减运算符必须是类的成员.但是因为他们改变的正好是所操作对象的状态,所以建议设定为成员函数. 对于递增与递减运算符来说,有前置与后置两个版本,因此,我们应该为类定义两个版本的递增与递减运算符. 问题来了,程序是如何区分前置和后置呢?因为都是++和-- 为了解决这个问题,后置版本的递增递减运算符接受一个额外的(不被使用)int类型的形参.当我们使用后置运算符时,编译器为这个形参提供一个值为0的实参.这个形参唯一的作用就是区分前置和后置运算符函数. 因为不会

2013级别C++文章9周(春天的)工程——运算符重载(两)

课程主页中:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生信息管理系统",找出当中出现构造函数.友元函数.运算符重载.静态数成员语法现象出现的位置,细致体会其使用方法.在以后的设计中可以灵活应用有关方法和技巧 项目1-3直接复制第8周的代码,增加要求的运算符重载定义后,作为第9周的任务另外发博文. [项目1]在第8周项目1基础上(1)再定义一目运算符 -,