重载函数

C++--第12课 - 操作符重载 - 上

爱⌒轻易说出口 提交于 2019-11-27 17:14:17
第12课 - 操作符重载 - 上 1. 使用C++标准库 C++标准库并不是C++语言的一部分。C++标准库是由C++语言编写而成的类库和函数的集合。C++标准库中定义的类和对象都位于std命名空间中。C++标准库的头文件都不带.h后缀。C++标准库涵盖了C库的功能。C库中<name.h>头文件对应C++中的<cname>。 C++标准库预定义了多数常用的数据结构,如:字符串,链表,队列,栈等: <bitset> <deque> <list> <map> <queue> <set> <stack> <vector> 例子: #include <cstdio> using namespace std; int main() { printf("Hello World!\n"); printf("Press any key to continue..."); getchar(); return 0; } 现实中的显示器对应于C++标准课中的显示器对象。 现实中的键盘对象对应于C++标准库中的键盘对象。 #include <iostream> using namespace std; int main() { cout<<"Hello World"<<endl; int x; int y; cout<<"1st Parameter: "; cin>>x; cout<<"2nd

小河学习日记---C++操作符重载

假装没事ソ 提交于 2019-11-27 15:44:32
什么是操作符函数 在C++中针对类类型的对象的运算符。由于类肯定不支持真正的操作运算,因此编译器会将它们翻译成函数 这种就叫操作符函数(运算符函数) 通过编译器把运算符翻译成运算符函数,可以针对自定义的类类型可以设计它独有的运算功能。 其实各种运算符已经具备了一些功能,再次定义就类似于重载。 双目运算符: a+b 成员函数 a.operator +(b); 全局函数 operator +(a,b); 单目运算符: !a 成员函数 a.operator!(void); 全局函数 operator!(a); #include using namespace std; class Point { private: int x; int y; public: Point (int x=0,int y=0) { this->x=x; this->y=y; } void show(void) { cout<<"(x;"<<x<<",y:"<<y<<")"<<endl; } friend const Point operator+(const Point& a,const Point& b) / const Point operator+(const Point& that)const { Point p2(x+that.x,y+that.y); return p2; } / }; const

C++操作符函数重载——学习笔记

限于喜欢 提交于 2019-11-27 15:43:48
一、操作符函数重载 什么是操作符函数:在C++中针对类类型的对象的运算符,由于它们肯定不支持真正的运算操作,因此编译器会将它们翻译成函数,这种就叫做 操作符函数(运算符函数)。 编译器把运算翻译成运算符函数,可以针对自定义的类类型设计它独有的运算功能。 其实各种运算符已经具备一些功能,再次实现它的就是叫作运算符重载。 双目运算符: a+b 成员函数 a.operator+(b); 全局函数 operator+(a,b); 单目运算符: !a 成员函数 a.operator!(void); 全局函数 operator!(a); 二、双目操作符函数重载 成员函数: const 类对象 operator#(const 类& that) const { return 类(参数#参数); } 注意:双目录运算符的运算结果是个右值,返回值应该加 const ,然后为了const对象能够调用,参数应写const,函数也应该具备const属性。 全局函数: const 类 operator#(const 类& a,const 类& b) { } 注意:全局函数不是成员函数,可能会需要访问到类的私有成员,解决这种问题可以把函数声明为类的友元函数(友元不是成员)。 友元:在类的外部想访问类的私有成员(public/protected/private)时,需要把所在的函数声明为友元,但是友元只是朋友

c++函数声明的位置对函数重载的影响

雨燕双飞 提交于 2019-11-27 15:30:56
c++为了兼容c,也是采用单遍编译。这特别影响函数重载决议(当c++编译器读到一个函数调用语句时,它必须从目前已看到的同名函数中选出最佳函数,哪怕后面的代码中出现了更合适的匹配) 1 #include<iostream> 2 using namespace std; 3 void f(int a ) 4 { 5 cout << (int)a << endl; 6 } 7 void b(char a) 8 { 9 f(a); 10 } 11 void f(char a) 12 { 13 cout << a << endl; 14 } 15 void bb(char a) 16 { 17 f(a); 18 } 19 int main() 20 { 21 b('d'); 22 bb('d'); 23 } vs2015输出是 100 d 来源: https://www.cnblogs.com/l2017/p/11368468.html

c++ 重载运算符和重载函数

自古美人都是妖i 提交于 2019-11-27 13:49:06
重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为 函数重载 和 运算符重载 。 ———— 类似于 python 的魔法方法 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个 重载函数 或 重载运算符 时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为 重载决策 。 一、函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。 实例: 同名函数 print() 被用于输出不同的数据类型 #include <iostream> using namespace std; class printData { public: void print(int i) { cout << "整数为: " << i << endl; } void print(double f) { cout << "浮点数为: " << f << endl; } void print(char c[]) { cout << "字符串为: " << c << endl; } }; int main(void) {

C++多态有哪几种方式?

て烟熏妆下的殇ゞ 提交于 2019-11-27 08:46:30
C++多态方式: (1)静态多态(重载,模板) 是在 编译的时候 ,就确定调用函数的类型。 (2)动态多态(覆盖,虚函数实现) 在 运行的时候 ,才确定调用的是哪个函数,动态绑定。运行基类指针指向派生类的对象,并调用派生类的函数。 虚函数实现原理:虚函数表和虚函数指针。 纯虚函数: virtual int fun() = 0; 多态基础介绍: =============================================================================================== 首先,什么是多态(Polymorphisn)?按字面的意思就是"多种形状"。我手头的书上没有找到一个多态的理论性的概念的描述。 暂且引用一下 Charlie Calverts的对多态的描述吧——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4 编程技术内幕")。 简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数(Virtual Function) 实现的。 好,接着是"虚函数"(或者是"虚方法")。虚函数就是允许被其子类重新定义的成员函数。而子类重新定义父类虚函数的做法,称为

重载和重写区别

会有一股神秘感。 提交于 2019-11-27 07:11:45
转自:https://blog.csdn.net/wintershii/article/details/80558739 1.重写(Override) 从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。 例如: public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Son s = new Son(); s.sayHello(); } public void sayHello() { System.out.println("Hello"); } } class Son extends Father{ @Override public void sayHello() { // TODO Auto-generated method stub System.out.println("hello by "); } } 重写 总结: 1.发生在父类与子类之间 2

C#笔记 - 转发

混江龙づ霸主 提交于 2019-11-27 05:08:19
1. 引用类型 是类型安全的指针,它们的内存是分配在堆(保存指针地址)上的。 String、数组、类、接口和委托都是引用类型。 2. 强制类型转换与as类型转换的区别 :当类型转换非法时,强制类型转换将抛出一个System.InvalidCastException异常, 而as不会抛出异常,它返回一个null值。 3. 用using创建别名:using console = System.Console; 4. 访问限定符: public 该成员可以被其他任何类访问 protected 该成员只能被其派生类访问 private 该成员只能被本类的其他成员访问 internal 该成员只能在当前编译单元的其他成员访问 5. 带参数列表和返回值的Main方法: class Test { public static int Main(string[] args) { foreach (string arg in args) { ... } } } 6. 构造函数(constructor)包括实例构造函数和静态构造函数。 构造函数与类名相同,且不能有返回值。例: class TestClass { TestClass() //实例构造函数:可以访问静态成员和实例成员,用于初始化实例成员 { ... } static TestClass() //静态构造函数:只能访问静态成员

第二十一篇 -- 研究下函数(四) —— 函数重载

拈花ヽ惹草 提交于 2019-11-27 03:37:06
在C++程序中不允许有相同的函数出现,否则调用时无法区分到底使用哪一个。区分两个函数靠的不仅是函数名,还有函数的参数列表。如果多个函数拥有相同的函数名,但参数列表不同,则称为函数重载,例如: int function(); int function(int); int function(double); int function(int, double); 虽然上述4个函数的名字都是“function”,但参数列表不同,所以可以共存于一个程序中。只是在调用时,需要传入不同的实参,以便调用所需的目标函数。 当心:函数的返回类型不能用来区别函数。如果两个函数仅返回类型不同,则第二个出现的函数会被认为是对第一个函数的错误重复。 为什么需要函数重载? 其实重载早在C语言中就已经存在了,例如各种算术运算符。整数和浮点数在内存中的表示方式是不一样的,但在进行各种算数运算时用的运算符却是一样的,例如: 1 + 2; 1.1 + 2.2; 上述表达式中就应用了重载的加号运算符。如果不使用重载,那么对于整数的加法和浮点数的加法就要采取两种完全不同的运算符。整数仍然用“+”,而浮点数或许可以用“?”表示加法运算。这样做不仅使程序变得很复杂,也无助于解决问题。所以,只有重载才是解决问题的办法。 C++语言将重载进一步扩展,不仅运算符可以重载,而且函数也可以重载。这样

Arrays工具类

筅森魡賤 提交于 2019-11-27 02:44:40
数组转集合asList 将数组转换为集合,接收一个可变参数 public static <T> List<T> asList(T... a); public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1, 2, 3); list1.forEach(System.out::println); // 1 2 3 Integer[] data = {1, 2, 3}; List<Integer> list2 = Arrays.asList(data); list2.forEach(System.out::println); // 1 2 3 } 注意:该方法返回的是 Arrays 内部静态类 ArrayList ,而不是我们平常使用 java.util.List 包下的 ArrayList。由于该静态类的底层采用大小固定的数组,所以任何对该 list 的添加、删除操作都会抛出异常。 填充数组fill 用指定元素填充整个数组 //有多个不同数据类型的重载方法,此处列出一个 public static void fill(Object[] a, Object val); public static void main(String[] args) { Integer[] data = {1, 2