封装继承和多态是面向对象三大基本支柱。
在面向对象系统中有两种编译方式:静态联编和动态联编
静态联编:也叫早期联编:指系统在编译时就决定如何实现某一动作,提供了执行速度快的优点。
动态联编:也叫滞后联编:指系统运行时动态实现某一动作,它提供了灵活和高度问题抽象的优点。
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++之运算符重载简单小结的更多相关文章

  1. C++运算符重载(简单易懂)

    转载:https://www.cnblogs.com/liuchenxu123/p/12538623.html 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型. 你 ...

  2. C++运算符重载的妙用

    运算符重载(Operator overloading)是C++重要特性之中的一个,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用.详细包含重载operator<<,o ...

  3. C#高级编程笔记2016年10月12日 运算符重载

    1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...

  4. PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天

    PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数    1  构造  2  析构   3  赋值  4 拷贝构造  5 oper ...

  5. 我的c++学习(8)运算符重载和友元

    运算符的重载,实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该运算符时就调用此函数来行使运算符功能.这个函数叫做运算符重载函数(常为类的成员函数). 方法与解释 ◆ 1.定义运 ...

  6. C# 类型运算符重载在类继承中的调用测试

    这是一篇晦涩难懂的片面的研究 一,简单的继承层次 class CA { } class CB : CA{ } class CC : CB{ } } void Test(CA oa){//CATest ...

  7. 【C++】运算符重载

    运算符重载,主要是简化类类型运算,能够让我们对类对象直接用运算符进行运算.基本语法: 类型 operator 运算符(参数列表){ ... } Complex operator+(Complex va ...

  8. Java longTime 和C#日期转换(结构+运算符重载)

    前几天,因为工作原因,连到了公司的一个java系统.查看数据的时候,突然整个人都不好了,数据库中日期字段时间为毛都是整型?之前从来没有接触过java,所心就趁机了解了一下.原来,在数据库中,保存的是j ...

  9. C++:运算符重载函数

    5.运算符重载 5.1 在类外定义的运算符重载函数 C++为运算符重载提供了一种方法,即在运行运算符重载时,必须定义一个运算符重载函数,其名字为operator,后随一个要重载的运算符.例如,要重载& ...

随机推荐

  1. 将某页面中ajax中获取到的信息放置到sessionStorage中保存,并在其他页面调用这些数据。

    A页面代码: var obj = data.data; var infostr = JSON.stringify(obj);//转换json sessionStorage.obj = infostr; ...

  2. 涉及自制系统AS的几个协议总结

    IGP(Interior Gateway Protocol): 内部网关协议的总称:其下有RIP和OSPF EGP(External Gateway Protocol): 外部网关协议的总称:目前使用 ...

  3. oracle 完整性约束的禁用启用以及对表的影响,表的修改和复制

    primary key ----表的唯一性约束,不能为空,且不能有重复值 foreign key ----俩表之间的约束,启用之时,在删除数据时需要先删除父表数据,再删除子表数据 禁用方式为:alte ...

  4. spring入门(二) 使用注解代替xml配置

    1.导包(略) 2.applicationContext.xml如下: <?xml version="1.0" encoding="UTF-8"?> ...

  5. node读写文件

    结束了一天的工作和学习,今天对于自己最大的收获就是node读写文件和对callback函数有了更深一步的理解.总结一下node读写的文件的注意事项吧(注意:下面讲的是增加数据的方法): 1.我们可以封 ...

  6. c/c++面试总结---c语言基础算法总结2

    c/c++面试总结---c语言基础算法总结2 算法是程序设计的灵魂,好的程序一定是根据合适的算法编程完成的.所有面试过程中重点在考察应聘者基础算法的掌握程度. 上一篇讲解了5中基础的算法,需要在面试之 ...

  7. Django快速开发投票系统

    使用Django搭建简单的投票系统:这个是官网的教程:https://docs.djangoproject.com/en/2.0/intro/tutorial01/ 在Run manage.py Ta ...

  8. spring boot 搭建基本套路《1》

    1. Spring复习 Spring主要是创建对象和管理对象的框架. Spring通过DI实现了IoC. Spring能很大程度的实现解耦. 需要掌握SET方式注入属性的值. 需要理解自动装配. 需要 ...

  9. (九)Pycharm异常、模块

    异常:     当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"   捕获异常:      格式:try+执行代码······ ...

  10. MySQL多表数据查询(DQL)

    数据准备: /* ------------------------------------创建班级表------------------------------------ */ CREATE TAB ...