重载函数

C++ Primer 有感(重载操作符)

时间秒杀一切 提交于 2020-03-21 15:25:30
1.用于内置类型的操作符,其含义不能改变。也不能为任何内置类型定义额外的新的操作符。(重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义) 2.重载操作符,操作符的优先级、结合性或操作数数目不能改变。 注意:重载操作符时使用默认实参是非法的 。 3.重载操作符并不保证操作数的求值顺序,不再具备短路求值特性。 4.作为类成员的重载函数,其形参看起来比操作数数目少1。作为成员函数的操作符有一个隐含的this形参,限定为第一个操作数。( 重载一元操作符如果作为成员函数就没有(显式)形参,如果作为非成员函数就有一个形参。类似的,重载二元操作符定义为成员时有一个形参,定义为非成员函数时有两个形参 ) 5.重载逗号、取地址、逻辑与、逻辑或等操作符通常不是好做法。这些操作符具有有用的内置含义,如果我们定义了自己的版本,就不能再使用这些内置含义。 6. 将要用作关联容器键类型的类定义<操作符。关联容器默认使用键类型的<操作符。即使该类型将只存储在顺序容器中,类通常也应该定义相等(==)操作符和小于(<)操作符,理由是许多算法假定这些操作符存在。如果类定义了相等操作符,它也应该定义不等操作符!=。 7.为类设计存在操作符的时候,是将操作符设置为类成员还是普通黑成员函数。下面是一些指导原则

5.友元、运算符重载

限于喜欢 提交于 2020-03-20 12:37:11
1.友元函数  定义:在C++中,一个普通函数是不可以直接访问类中的任意成员的,但是如果把这个函数声明为友元函数,那么这个函数就可以访问类中的所有成员。     优点:能够不受限制地访问类中的任意成员,在一定程度上可以提高程序的执行效率。   缺点:打破类的封装性。   声明格式:friend 返回值数据类型 函数名(参数类别) 可以在类中的任意位置声明   (1)普通函数声明为友元函数 class Student{ friend void student_info(Student& student_info); public: Student(){} ~Student(){} protected: private: } //声明函数为友元函数 void student_info(Student& stu){}      (2)一个类的成员函数可以声明为另一个类的友元函数(一般不建议使用) class Cat;//引用形参,指针,引用 class Person{ public: Person(Cat& c):caty(c){} ~Person(){} void show(); private: Cat &caty; } class Cat { public: Cat(){} ~Cat(){} private: friend void show(); }   (3

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

匆匆过客 提交于 2020-03-18 15:35:22
重载运算符是对正常函数的语法美化.没给语言增加任何基本的东西,但改善了可理解性并降低维护费用.当用户需要时,就应该使用运算符重载,但应该仅仅以用户熟悉的语义方式来使用它。 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

Java程序的方法设计

喜欢而已 提交于 2020-03-17 22:26:41
Java程序的方法设计 本文关键字:Java、方法定义、方法设计、方法调用、方法重载 一、方法的定义 我们在学习Java编程以后接触到的第一个程序就是"Hello World”,在这当中涉及到两个主要的结构:类和main方法,当时我们只是说明了main方法是程序的入口,那么当我们想要自己定义一个方法时应该如何下手呢? 1. 概念与作用 首先我们要明确方法的概念和作用,从名称上来说,方法也可以被称为函数,是用来解决同一类的问题的。从代码的结构上来说,定义方法可以减少重复的代码,也能使得整个程序结构更加清爽。 假如我们需要计算两个数的加和 public class Test{ public static void main(String[] args){ // 定义两个变量,so easy int a = 10,b = 5; int c = a + b; System.out.println(c);// 15 } } 如果我们需要多次反复执行同一个逻辑,那么就会产生很多相同的代码 public class Test{ public static void main(String[] args){ int a = 10,b = 5; int c = 20,d = 10; // 可以看到,虽然变量名称不同,但是计算的逻辑是相同的 // 如果某一段代码反复出现

c++重学笔记4 - 用const重载成员函数

混江龙づ霸主 提交于 2020-03-17 20:45:43
喜欢这篇文章吗?喜欢的话去看博主的置顶博客,即可依据分类找到此文章的原版得到更好的体验, 图片及代码显示的问题,笔者深感抱歉,想要更好的体验去原博文即可。 title: c++重学笔记4 - 用const重载成员函数 mathjax: true date: 2020-03-13 16:18:03 categories: [c++重学笔记] tags: [c++重学笔记] keywords: [c++重学笔记] const 能够重载成员函数    为什么要重载一遍const? 目前笔者也不太懂,只知道const能够让c++代码更加高效。下面的代码解释了如何使用const重载成员函数,大概是这样的,const对象调用成员函数的时候会调用const版,普通的对象调用普通版。 # include <iostream> using namespace std ; class my_class { int x = 1 , y = 2 ; public : const int & get ( ) const { std :: cout << "x" << std :: endl ; return x ; } // int& get() const {return x; } 这句话不被允许编译,因为可能会改变x的值 int & get ( ) { std :: cout << "y" << std

C++(四十四)之函数调用符

南楼画角 提交于 2020-03-16 18:13:50
本篇我们主要讲解函数符号的重载。 函数符号(),那么他的重载有什么用呢。 目前我们先了解到,函数符号可以用来做仿函数就可以了。 下面我们举例说明一下: /**************************************************** * brief : ()函数符重载 * author : shao * date : 2020-03-13 * note : 要注意的是,仿函数和构造函数 * 在调用时候的区别。 * ****************************************************/ #include <iostream> using namespace std; class Add{ public: int val1; int val2; Add(int v1, int v2) { this->val1 = v1; this->val2 = v2; } Add(int a) { this->val1 = a; } /* * 这里对函数调用符号进行重载, * 方面后面对象可以直接调用()符号 * 可以用对象直接写仿函数的形式, * 这里只是写了一个int个例, * 用户可以根据不同的要求写出不同的类型 */ int operator()(int a, int b) { return a + b; } }; void

基础知识点(一)

瘦欲@ 提交于 2020-03-16 11:13:45
基础知识点(一) 一、 面向对象思想的好处 1 、面向对象也是基于面向过程的编程思想,但是面向对象相比于面向过程更符合我们的思维方式,万物皆对象。 2 、可以将复杂的问题简单化,大大提高了程序的可读性和可维护性 3 、面向过程思想中,我们是程序的执行者,面向对象当中,我们是程序的调用者,这样的话也可以方便程序给其他人调用,提高了程序的扩展性 面向对象的三大基本特征以及五大基本原则: 基本特征: 1 、封装 2 、继承 3 、多态 基本原则: 1、 单一职责原则 2、 里氏替换原则 3、 依赖倒置原则 4、 接口隔离原则 5、 开放封闭原则 二、 类:类是抽象的,是一组相关的属性和行为的集合,一个模板。 对象:对象是具体的,是客观存在的实例,是该类事物的具体体现 属性 —— 对象具有的各种特征 每个对象的每个属性都拥有特定值 方法 —— 对象执行的操作 三、对象和类的关系:特殊到一般,具体到抽象。 类:我们叫做 class 。 对象:我们叫做 Object, instance( 实例 ) 。以后我们说某个类的对象,某个类的实例。是一样的意思。 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。 对象是 Java 程序的核心,在 Java 程序中“万事万物皆对象”。 JDK

如何能做到函数返回值重载?

隐身守侯 提交于 2020-03-16 00:12:22
(转) string Test() {...} int Test() {...} 然后通过接受方的上下文自动选取重载: int i = Test(); string s = Test(); 当然VB或者C#都是不允许这样写的。不过IL并没有禁止这一写法,事实上在VB或C#中有一种语法结构允许按照返回值选取相应的重载,那就是隐式类型转换运算符(implicit operator或者Widening Operator CType)。通过辅助类的隐式类型转换运算符,我们可以实现上述要求的语法。 class Foo { string TestString() { return "I'm a string"; } int TestInt() { return 100; } public TestHelper Test() { return new TestHelper(this); } public struct TestHelper { Foo m_host; public TestHelper(Foo host) { m_host = host; } public static implicit operator int(TestHelper helper) { return helper.m_host.TestInt(); } public static implicit

方法的定义与重载

孤人 提交于 2020-03-15 04:29:57
一、方法   方法的定义:     修饰符 返回值类型 方法名(参数列表){       //代码       return 返回值;     }     修饰符:public static     如果返回值类型为void,则表示没有返回值     参数列表:方法在运算过程中的未知数据,调用者调用方法时传递     return:将方法执行后的结果带给调用者,方法执行到 return ,整体方法运行结束      注意:在定义一个方法时,要明确返回值和参数列表;该方法返回值的类型,形参的类型和数量(一个方法只能有一个返回值)     不能在return后面写代码,return代表着方法的结束,后面的代码将永远不会执行     return后面参数的类型要与返回值类型一致      二、形参和实参的区别     形参:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。     实参:可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 三、方法的重载     允许一个类中存在多个方法名相同的方法,只要他们参数列表不同即可;与返回值类型无关,     参数列表不同:参数的顺序,参数个数,参数类型     重载:jvm通过参数列表调用不同的方法    

C++运算符重载一:运算符重载、复数类CComplex、输出运算符重载

帅比萌擦擦* 提交于 2020-03-11 13:15:03
文章目录 一、运算符重载 二、复数类CComplex 三、输出运算符重载 一、运算符重载 运算符重载 : 使对象的运算运算表现得和编译器内置类型一样,使同一个运算符可以有不同的功能。即定义一个重载运算符的函数,使指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新的功能。 运算符重载实质上是函数的重载,重载运算符的函数一般格式如下 : 函数类型 operator 运算符名称(形参表) {对运算符的重载处理} operator是关键字,是专门用于定义重载运算符的函数的,运算符名就是C++已有的运算符。 运算符重载的规则: (1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 (2)C++允许重载的运算符 不能重载重载的运算符只有5个: ① .   成员访问运算符 ② *   成员指针访问运算符 ③ ::   域运算符 ④sizeof 长度运算符 ⑤ ?:   条件运算符 (3)重载不能改变运算符运算对象(即操作数)的个数 (4)重载不能改变运算符的优先级别 (5)重载不能改变运算符的结核性 (6)重载不能改变默认的参数 (7)重载的运算符必须和用户自定义类型的对象一起使用,其参数至少有一个是类对象(或类对象的引用) (8)用于类对象的运算符一般必须重载,但有两个例外,“=”和“&”不必用户重载 运算符重载的函数有两种处理方式: 1