运算符重载

c#运算符重载

匿名 (未验证) 提交于 2019-12-02 22:06:11
运算符重载 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。 例如,请看下面的函数: public static Box operator+ (Box b, Box c) { Box box = new Box(); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; return box; } 上面的函数为用户自定义的类 Box 实现了加法运算符(+)。它把两个 Box 对象的属性相加,并返回相加后的 Box 对象。 运算符重载的实现 下面的程序演示了完整的实现: using System; namespace OperatorOvlApplication { class Box { private double length; // 长度 private double breadth; // 宽度 private double height; // 高度 public double getVolume() { return length * breadth * height; } public void setLength( double len ) { length = len

多态性总结

青春壹個敷衍的年華 提交于 2019-12-02 12:47:41
  多态从实现的角度可以划分为:编译时多态和运行时的多态。 运算符重载   运算符重载即静态多态,是对已有的运算符赋予多重含义,运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,唯一的区别是运算符函数的函数名是由关键字 operator 和其后要重载的运算符符号构成的。把指定的运算表达式转化为对运算符函数的调用,运用对象转化为运算符函数的实参。 • 运算符重载格式 函数类型 operator运算符 (形参){ …… } • 运算符重载规则 当重载为类的成员函数的情况,形式参数个数=原操作数个数-1(后置++、--除外)。 当重载为类友元函数的情况,形式参数个数=原操作数个数。 除了类属关系运算符 "." 、成员指针运算符 ".*" 、作用域运算符 "::" 、sizeof 运算符和三目运算符 "?:" 以外,C++ 中的所有运算符都可以重载。 重载运算符限制在 C++ 语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。 //复数类成员函数自增 #include<iostream> using namespace std; class complex{ private: int real,imag; public: complex(int r,int i){ real=r; imag=i; }

C++第五次作业

不羁的心 提交于 2019-12-02 11:48:30
多态性 一、运算符重载 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。 1、运算符重载的规则 (1)C++种的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已经有的运算符。 (2)重载之后的运算符的优先级和结核性都不会改变。 (3)运算符重载时针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 C++标准规定,有些操作符是不能重载的,它们是类属关系运算符"."、成员指针运算符".*"、作用域分辨符"::"和三目运算符"?:"。 前面两个运算符保证了C++中访问成员功能的含义不被改变。作用域分辨符的操作是类型,而不是普通的表达式,也不具备重载的特征。 运算符的重载形式: 返回类型 operator 运算符(形参表) {   函数体 } 重载为类的成员函数和重载为非成员函数的声明方式不同。 2、运算符重载的实例 对类Point重载“++”(自增)、“--”(自减)“、运算符,要求同时重载前缀和后缀的形式 #include <iostream> using namespace std; class Point { public: Point(int xx = 0, int yy = 0):x(xx),y(yy){}

C++ 第五次作业 重载与多态

安稳与你 提交于 2019-12-02 11:44:25
重载与多态 一、教学目标 熟练了解并掌握重载和多态的相关概念,进而在平时应用到,并且能了解其中的思想和过程 二、教学过程 (一)定义 多态是指同样的消息被不同类型的对象接收时导致的不同的行为,消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。。 C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中 主要的方式。 (二)多态的类型 面向对象的多态性可以分为4类:重载多态,强制多态,包含多态和参数多态,前面两种称为专用多态,后面两种称为通用多态。 (三)多态的实现 分为两类:编译时的多态和运行时的多态。 (四)具体应用: 1.运算符重载: 运算符重载就是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。 运算符重载的本质就是函数重载。 注:运算符重载为类型的成员函数时,函数的参数个数比原来的操作个数要少一个;(后置++;- -除外) 重载为非成员函数时,个数相同。 举例:定义计数器 Counter 类,对其重载运算符 + typedef unsigned short USHORT; #include <iostream.h> class Counter { public: Counter(); Counter(USHORT initialValue); Counter(){} USHORT

c++第五次作业

亡梦爱人 提交于 2019-12-02 11:26:08
重载与多态 一.运算符重载 定义:运算符重载是对已有运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。例如: 在这样一段程序中,我们对a,b进行加法运算, # include < iostream > using namespace std; class Counter {public : Counter() {}; Counter(int i) { count = i; } private : int count; }; int main() { Counter a(1),b(2),c; cout << "a=" << a<<endl; cout << "b=" << b << endl; c = a + b; cout << "c=" <<c << endl; system("pause"); return 0; } 会出现这样的错误 这时候就需要运算符重载 1.1 运算符重载的规则:(1)c++中的运算符大多可以重载,而且只能重载已有运算符。 (2)重载之后运算符优先级和结合性都不会改变。 (3)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。 运算符重载为类的成员函数的语法形式: 返回类型 operater 运算符{形参表} { 函数体 } 以非成员函数重载的语法与之相同,但有时访问涉及到私有成员,可以将函数声明为友元函数。例如: #

运算符重载_继承_多态_模版

末鹿安然 提交于 2019-12-01 23:44:16
1:运算符重载 1 RMB.h 2 #ifndef RMB_H 3 #define RMB_H 4 5 #include <bits/stdc++.h> 6 using namespace std; 7 class RMB 8 { 9 public: 10 RMB(); 11 RMB(int, int); 12 virtual ~RMB(); 13 void display() 14 { 15 cout << "RMB:" << yuan << "."; 16 if(jf < 10) 17 { 18 cout << "0"; 19 } 20 cout << jf << endl; 21 } 22 friend RMB operator+(const RMB&, const RMB&);//作为友元函数的元素符重载 23 friend bool operator>(const RMB&, const RMB&); 24 int Getjf() { return jf; } 25 void Setjf(int val) { jf = val; } 26 int Getyuan() { return yuan; } 27 void Setyuan(int val) { yuan = val; } 28 RMB operator+(const RMB& s)//作为成员函数的运算符重载

初级C++2类与对象

蓝咒 提交于 2019-12-01 12:12:21
对象 object |--属性 attribute |--行为 behaviour 调用对象中的函数就是向该对象传送一个消息 message 封装性 encapsulation |--一是将有关数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰 |--二是将对象中某些部分对外隐藏,即隐藏其内部细节,只留下少量接口,以便与外界联系,接受外界的消息,即信息隐藏 information hiding 抽象 abstraction 抽象的作用是表示同一类事物的本质。 类 继承与重用 软件重用 software reusability 多态性 polymorphism 面向过程:程序 = 数据结构 + 算法 面向对象:程序 = 对象s + 消息 ————————————————————————————————————— 类class 类是对象的抽象,对象是类的具体实例(instance) 类头 class head 类体 class body 成员列表 class member list 类中成员默认是private struct成员默认是public class 类名 { private: 私有数据和成员函数 public: 公用数据和成员函数 }; 成员访问限定符 member access specifier |--私有的 private

一元运算符重载

孤人 提交于 2019-11-30 12:59:13
就是操作数只有一个 比如自增自减的 有两种方式实现重载 一种是所谓成员函数重载,另一种是作为友元函数重载 先说第一种吧,举个例子 需要注意到,一元运算符作为成员函数重载,里面是没有参数的 class x { ... T operator@(){...}; //等价于T operator@(x *this) this 是 指针参数由系统自动添加的是一个隐含参数 }; T为返回类型,@为重载的运算符 woc,我写的时候不知道有time这个类库,我重名了。改了半个小时才意识到,人都快被气死了 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 class Time 5 { 6 private: 7 int h,m,s; 8 public: 9 Time(int hour,int minute,int second); 10 Time& operator++(); 11 void display(); 12 13 }; 14 15 Time::Time(int hour,int minute,int second) 16 { 17 h = hour; 18 if(h == 24) h = 0; 19 m = minute; 20 if(m == 60) m = 0; 21 s = second; 22 if(s == 60) s = 0

c++运算符重载

放肆的年华 提交于 2019-11-30 12:55:13
其实c++中各种运算符,都是很特殊的一类函数,运算符函数 不过还是和普通函数有区别的 函数意味着它们可以被重载,这样方便程序员重载一些运算符 说白了,就是你可以自定义这个运算规则 下面是复数类实现加减乘除的运算 加减 用普通成员函数实现 乘除 用友元类成员函数实现 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define cp Complex 4 5 class Complex 6 { 7 private: 8 double r,i; 9 public: 10 Complex(double R = 0,double I = 0):r(R),i(I){}; 11 //成员函数实现 12 Complex operator+(Complex b); 13 14 Complex operator-(Complex b); 15 16 //友元函数实现 17 friend Complex operator*(Complex a,Complex b); 18 19 friend Complex operator/(Complex a,Complex b); 20 21 void display(); 22 }; 23 24 //类外实现函数 25 Complex Complex::operator+(Complex b) 26 {

结构体、运算符重载

末鹿安然 提交于 2019-11-30 05:29:43
#include <bits/stdc++.h> #define _for(i, a, b) for (int i = (a); i < (b);++i) #define _rep(i, a, b) for (int i = (a); i <= (b);++i) using namespace std; struct Point{ int x, y; Point(int x = 0, int y = 0) : x(x), y(y){}; }; Point operator+(const Point A, const Point B) { return Point(A.x + B.x, A.y + B.y); } ostream& operator<<(ostream& out,const Point&p){ //引用out out << "(" << p.x << "," << p.y << ")" << endl; return out; } int n, l; int main() { Point A, B(2, 3); cout << A + B << endl; A.x=10; cout << A + B << endl; return 0; } 来源: https://www.cnblogs.com/zlwjy/p/11561862.html