重载函数

[cpp] 重载运算符规律总结

爷,独闯天下 提交于 2020-01-05 10:20:30
重载运算符是对正常函数的语法美化.没给语言增加任何基本的东西,但改善了可理解性并降低维护费用.当用户需要时,就应该使用运算符重载,但应该仅仅以用户熟悉的语义方式来使用它。 1. 重载规则 不能重载的运算符: . 和 .* 和 ?: 和 :: 和 sizeof 和 typeid 重载运算符有两种基本选择: 类的成员函数或者友元函数, 建议规则如下: 运算符 建议使用 所有一元运算符 成员函数 = () [] -> 必须是成员函数 += -= /= *= ^= &= != %= >>= <<= , 似乎带等号的都在这里了. 成员函数 所有其它二元运算符, 例如: –,+,*,/ 友元函数 2. 参数和返回值 当参数不会被改变,一般按const引用来传递(若是使用成员函数重载,函数也为const). 对于返回数值的决定: 1) 如果返回值可能出现在=号左边, 则只能作为左值, 返回非const引用。 2) 如果返回值只能出现在=号右边, 则只需作为右值, 返回const型引用或者const型值。 3) 如果返回值既可能出现在=号左边或者右边, 则其返回值须作为左值, 返回非const引用。 3. 几个例子 3.1 二元运算法建议使用友元函数重载,与内部类型的操作相似 1: class Integer { 2: int _val; 3: public: 4: Integer(int val

北理面试-重载运算符

两盒软妹~` 提交于 2019-12-31 02:21:25
题目描述 建立一个角类,在这个类中重载减号运算符(角度相减),并实现求出角度的正弦值的函数。 输入描述: 输入第一行为样例数m,接下来有m行每行两个整数表示角度。 输出描述: 输出m行,表示两角相减的正弦值,保留小数点后两位。 示例1 输入 1 60 30 输出 0.50 其实也就是重载运算符的问题。 c++重载运算符有关知识 sin函数没搞清楚…貌似是math函数里要用弧度制 以下为代码: # include <iostream> # include <cmath> using namespace std ; class angle { public : double data ; angle operator - ( const angle & b ) { angle an ; an . data = this - > data - b . data ; return an ; } double sinn ( double data ) { return sin ( data / 180 * 3.1415926 ) ; } } ; int main ( ) { int angle1 , angle2 , m ; angle no2 , no1 , no ; cin >> m ; for ( int i = 1 ; i <= m ; i ++ ) { cin >> angle1

c#面试题及答案(二)

折月煮酒 提交于 2019-12-30 01:24:03
注意:红色字体部分是本人更正了网络上的一些错误答案。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1).使用QueryString, 如....?id=1; response. Redirect().... 2).使用Session变量 3).使用Server.Transfer 3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 4.C#中的委托是什么?事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要 override 是进行基类中函数的重写。为了适应需要。

c++中的操作符重载(转)

不羁岁月 提交于 2019-12-28 10:14:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”。说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载。运算符重载和函数重载的不同之处在于操作符重载重载的一定是操作符。我们不妨先直观的看一下所谓的操作符重载: #include <iostream> using namespace std; int main() { int a = 2 , b = 3; float c = 2.1f , d = 1.2f; cout<<"a + b = "<<a+b<<endl; cout<<"c + d = "<<c+d<<endl; return 0; } 我们看到操作符“+”完成 float 和 int 两 种类型的加法计算,这就是操作符重载了。这些内置类型的操作符重载已经实现过了,但是如果现在我们自己写过的类也要实现实现类似的加法运算,怎么办呢?? 比如现在现在有这样一个点类point,要实现两个点的相加,结果是横纵坐标都要相加,这时候就需要我们自己写一个操作符重载函数了。 #include <iostream> using namespace std; class point { double x; double y; public: double get_x() {

C#-概念-类:类

北慕城南 提交于 2019-12-27 10:41:48
ylbtech-C#-概念-类:类 类(Class)是 面向对象程序设计 (OOP,Object-Oriented Programming) 实现信息封装的基础 。类是一种 用户定义类型 ,也称 类类型 。每个类包含数据说明和一组操作数据或传递消息的函数。 类的实例称为对象 。 1. 返回顶部 1、 中文名:类 外文名:Class 类 别:一种数据类型 本 质:类型 目录 1 介绍 2 用法 3 特性 4 示例 2、 2. 返回顶部 1、 介绍 一个简单的类图 类是 面向对象程序设计 中的概念,是 面向对象编程 的基础。 类的实质是一种数据类型 ,类似于 int 、char等基本类型, 不同的是它是一种复杂的数据类型 。 因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作 。 类是对现实生活中一类具有共同特征的事物的抽象 。如果 一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改 。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使 编译器 有可能检查对象的非法使用。 类的内部 封装 了方法,用于操作自身的成员。 类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method)

Overload,override和overwrite

做~自己de王妃 提交于 2019-12-26 08:50:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在平时工作中,有时老被这些搞混乱,因此还是记录下来,以后方便检查。 C++: Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。 (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 Override(覆盖):是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual 关键字。 Overwrite(重写):是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual 关键字,基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。 特别注意 如果基类有某个函数的多个重载(overload)版本,而你在子类中重写(overwrite)了其中的一个,或是子类添加新的函数版本,则所有基类的重载版本都被遮蔽。所以,正常情况下,在子类中应重写基类中的所有重载版本。 具体地讲

CLR基础之一---认识CLR [《CLR via C#》读书笔记]

情到浓时终转凉″ 提交于 2019-12-24 23:05:10
《CLR via C#》读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称。这是通用语言架构(简称CLI)的微软实现版本,它定义了一个代码运行的环境。CLR运行一种称为“通用中间语言”的字节码,这个是微软的通用中间语言实现版本。 CLR运行在微软的视窗操作系统上。查看通用语言架构可以找到该规格的实现版本列表。其中有一些版本是运行在非Windows的操作系统中。(维基百科CLR) 以上定义至少包含以下几点信息: CLR是一个类似于JVM的虚拟机,为微软的.Net产品提供运行环境。 CLR上实际运行的并不是我们通常所用的编程语言(例如C#、VB等),而是一种字节码形态的“中间语言”。这意味着只要能将代码编译成这种特定的“中间语言”(MSIL),任何语言的产品都能运行在CLR上。 CLR通常被运行在Windows系统上,但是也有一些非Windows的版本。这意味着.Net也很容易实现“跨平台”。(至于为什么大家的印象中.Net的跨平台性不如Java,更多的是微软商业战略导致的) CLR和.Net Framework的关系 .NET框架 (.NET Framework) 是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发

运算符重载

笑着哭i 提交于 2019-12-23 00:18:18
生成一个表示复数的类FS。复数的实部sb和虚部xb作为其数据成员。提供成员函数print()显示复数(格式:-3+5i或6-2i),重载“+”、“-”为FS类的成员函数,用来计算两个复数的和、差。 思路导航: ① 定义类,设计构造函数和显示函数print(); ② 重载运算符“+”、“-”为类FS的成员函数。 ③ 实例化FS类的2个对象,并利用重载的运算符对其进行计算。 另外,根据上述定义,试将上述的运算符重载成员函数改写成友元函数。 # include "iostream.h" # include "FS.h" void FS :: SetFS ( double s , double x ) { sb = s ; xb = x ; } void FS :: print ( ) { if ( sb == 0 ) { if ( xb == 0 ) { cout << "0" << endl ; } else if ( xb == 1 ) { cout << "i" << endl ; } else { cout << xb << "i" << endl ; } } if ( sb != 0 ) { if ( xb == 1 ) { cout << sb << "+" << "i" << endl ; } else if ( xb == 0 ) { cout << sb << endl

重载函规则

时光怂恿深爱的人放手 提交于 2019-12-22 21:30:37
1.首先编译器会让函数调用的时候会进行精确的匹配 2.如果精确匹配不成功,接着尝试类型转换,如果转换之后,能够匹配某个版本,也能调用成功 3.函数调用的时候。出现两个版本都匹配的情况,编译器是不会编译通过。 4.注意函数的默参数地 情况 1 void func() { cout << "调用一成功" << endl; } void func(int a,int b) { cout<< "调用二成功" << endl; } void func(int a,int b,int c){} void test() { int a = 10; int b = 10; int c = 10; func(); func(c, b); func(a,b,c); } 来源: https://www.cnblogs.com/MyLoveLiJuan/p/11982767.html

C++ STL总结

谁说我不能喝 提交于 2019-12-22 05:14:13
STL概述 STL (Standard Template Library, 标准模板库) 是惠普实验室开发的一系列软件的统称。主要核心分为三大部分:容器(container)、算法(algorithm)和迭代器(iterator),另外还有容器适配器(container adaptor)和函数对象(functor)等其它标准组件。 容器: 顺序容器: 名称 特性 vector 模拟的数据结构式动态数组,在内存中是连续储存的,支持随机存取,支持在 尾部 快速插入和删除元素,搜索速度较慢 deque 称为双端队列,在内存中的储存方式是小片连续,每片之间用链表连接起来,支持随机存取,支持在 头部和尾部 快速插入和删除元素,搜索速度较慢 list 称为双向链表,在内存中的储存是不连续的,每个元素的内存之间用指针相连, 不支持 随机存取(因为要从首或尾遍历至指定位置),但是支持在 任意位置 快速插入和删除元素,搜索速度 最慢 ,扩展内存时无需复制和拷贝原元素 array 称为静态数组,在内存中是连续储存的,支持随机存取,不支持插入或删除元素 forward_list 称为前向链表,在内存中的储存是不连续的,同list一样支持在任意位置快速插入和删除元素,不支持随机存取,搜索速度也较慢,与list最大的区别在于其只能从头部遍历至尾部,不能反向遍历,因此没有保存后向指针,比list更省内存