重载函数

函数重载、多态与型变

蓝咒 提交于 2019-11-28 22:24:05
一、问题描述 视图类需要填充数据: view.loadData(data:Date); 视图是个继承体系; 视图数据的元素个不相同。 期望: 1、数据填充调用统一的接口; 2、传入的数据不经过类型转换可以直接获取数据中的具体元素。 解决方案: 参数协变; 结果: 参数协变 的函数被认为是函数重写; 二、函数重载的型变; 函数重载只支持参量的逆变和返回值的协变 三、结论 问题描述不可解。 四、接口与基类 在重载中不能替换为具体的类; 缺省只能使用公用功能。 使用具体功能需要经过类型转换。 来源: https://www.cnblogs.com/feng9exe/p/11430339.html

什么是多态、方法重写与重载

拥有回忆 提交于 2019-11-28 12:44:45
什么是多态 多态的概念呢比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 如果按照这个概念来定义的话,那么多态应该是一种运行期的状态。 为了实现运行期的多态,或者说是动态绑定,需要满足三个条件。 即有类继承或者接口实现、子类要重写父类的方法、父类的引用指向子类的对象。 public class Parent{ public void call(){ sout("im Parent"); } } public class Son extends Parent{// 1.有类继承或者接口实现 public void call(){// 2.子类要重写父类的方法 sout("im Son"); } } public class Daughter extends Parent{// 1.有类继承或者接口实现 public void call(){// 2.子类要重写父类的方法 sout("im Daughter"); } } public class Test{ public static void main(String[] args){ Parent p = new Son(); //3.父类的引用指向子类的对象 Parent p1 = new Daughter(); //3.父类的引用指向子类的对象 } }重载(静态多态) 就是函数或者方法有同样的名称

C++基础学习5

有些话、适合烂在心里 提交于 2019-11-28 07:12:18
9类和对象进一步 9.1构造函数 如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化。 但是,如果数据成员是私有的,或者类中有private或protected的成员, 就不能用这种方法初始化。 class Time {public : //声明为公用成员 hour; minute; sec; }; Time t1={14,56,30}; //将t1初始化为14:56:30 构造函数的作用 构造函数的名字必须与类名同名,构造函数没有返回值,因此也不需要在定义构造函数时声明类型, 以便编译系统能识别它并把它作为构造函数处理。 在类内定义构造函数,也可以只在类内对构造函数进行声明而在类外定义构造函数。 构造函数不需用户调用,也不能被用户调用。 带参数的构造函数 构造函数首部的一般格式为构造函数名(类型 1 形参1,类型2 形参2, …) 定义对象的一般格式为 类名 对象名(实参1,实参2, …); #include <iostream> using namespace std; class Box {public : Box(int,int,int);//形参由定义对象时给出 int volume( ); private : int height; int width; int length; }; //声明带参数的构造函数//声明计算体积的函数 Box::Box

第38 课逻辑操作符的陷阱

倖福魔咒の 提交于 2019-11-28 05:32:59
逻辑运算的原生语义 -操作数只有两种值(true和false) -逻辑表达式不完全计算就能确定最终值---------短路规则 -最终结果只能是true或者false 首先看一个C语言的例子: #include <iostream> #include <string> using namespace std; int func(int i) { cout << "int func(int i) : i = " << i << endl; return i; } int main() { if( func(0) && func(1) ) { cout << "Result is true!" << endl; } else { cout << "Result is false!" << endl; } cout << endl; if( func(0) || func(1) ) { cout << "Result is true!" << endl; } else { cout << "Result is false!" << endl; } return 0; } 这个例子运行结果与我们分析的一致。 看下面这个例子:会颠覆你的认知。 #include <iostream> #include <string> using namespace std; class Test { int

C++运算符重载

吃可爱长大的小学妹 提交于 2019-11-28 05:11:02
转载自:https://www.cnblogs.com/liangxiaofeng/p/4311796.html 1.运算符重载定义: C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的, 运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下: <返回类型说明符> operator <运算符符号>(<参数表>) { <函数体> }  2.运算符重载时要遵循以下规则: (1) 除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算符和三目运算符"?:"以外,C++中的所有运算符都可以重载。 (2) 重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。 (3) 运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。 (4)

Java--面向对象二(重载与重写)

不打扰是莪最后的温柔 提交于 2019-11-28 00:17:06
文章目录 3、重载与重写  3.1 重载与重写的概念  3.1.1 重载的概念  3.1.2 重写的概念  3.2 方法的重载  3.2.1 重载的要求  3.3 方法的重写  3.3.2 重写的要求  3.4 重载与重写的区别  3.4.1 目的不同  3.4.2 "绑定"时间时间不同 3、重载与重写  3.1 重载与重写的概念  3.1.1 重载的概念  **重载(Overload)**是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)  3.1.2 重写的概念 ​  **重写(Override)**是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法,如需父类中原有的方法则可使用 super 关键字。  3.2 方法的重载 ​   定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可 public void

关于lower_bound的优先级重载

﹥>﹥吖頭↗ 提交于 2019-11-27 22:04:28
可以选择重载小括号,或者直接写bool函数 struct cmp{ bool operator () (int a,int b) {return a>b;} }; lower_bound(a.begin(),a.end(),x,cmp()); 或者 bool cmp (int a,int b) {return a>b;} lower_bound(a.begin(),a.end(),x,cmp); lower_bound返回第一个>=x的指针,重载后返回第一个<=x的指针 upper_bound返回第一个>x的指针,重载后返回第一个<x的指针 来源: https://www.cnblogs.com/White-star/p/11379746.html

运算符2

流过昼夜 提交于 2019-11-27 20:59:06
补充上一部分的运算符 这次写了这一些运算符 等于== 赋值= 箭头-> 括号运算符 () 输出运算符>> 1 #include<iostream> 2 #include<string> //string类 存放字符串 3 using namespace std; 4 class myString 5 { 6 char*str;//指针 用于存放字符串 7 int size;//用来管理堆内存的大小 判断内存是否足够 8 public: 9 myString() 10 { 11 size = 1; 12 str = new char[1]{'\0'};//放入一个'\0' 13 } 14 myString(char* string)//拷贝构造 15 { 16 size = strlen(string) + 1; //+1的目的是存放\0 17 str = new char[strlen(string) + 1]; 18 strcpy(str, string);//拷贝过程 19 } 20 ~myString() 21 { 22 if (str != nullptr) 23 { 24 delete[] str; 25 str = nullptr; 26 } 27 } 28 friend bool operator==(const myString&a, const char*b)/

运算符重载

◇◆丶佛笑我妖孽 提交于 2019-11-27 20:28:00
在c++中运算符重载通过两种方式:1.友元函数的方式 2.成员函数的方式 五种运算符不可以重载 点运算符. 域名解析符:: 点星运算符.* 三目运算符:? 求大小运算符sizeof 不能使用成员重载的运算符>> << 不能通过友元的方式重载的运算符 赋值运算符= 括号运算符()下标运算符 [] 箭头运算符-> 双目运算符推荐使用友元 单目运算符 推荐使用成员 友元函数是单项传递的 A是B的友元类 在B中不申明 ,B不是A的友元类 A是B的友元类 B是C的友元类 A不一定是C的友元类 需要在C中申明 友元方法和成员方法的区别是 友元方法不能使用this调用成员变量而成员方法可以调用this 1 #pragma once 2 #include<iostream> 3 using namespace std; 4 class A 5 { 6 int data; 7 static int x; 8 int arr[10]; 9 public: 10 A(int data = 0);//构造函数,可缺省 11 A(const A&other);//调用拷贝构造 12 ~A(); 13 int getData(); 14 void setData(int data); 15 friend int addA(const A&a, const A&b);//在申明的时候使用友元在类外定义 16

第34课.数组操作符的重载(\"[]\"重载)

妖精的绣舞 提交于 2019-11-27 17:14:48
1.问题: string类 对象还具备c方式字符串的灵活性吗?还能直接访问单个字符吗? 答案:可以按照c字符串的方式使用string对象 string s = "a1b2c3d4e"; int n = 0; for(int i = 0; i < s.length(); i++) { if(isdigit(s[i])) { n++; } } 2.类的对象怎么支持数组的下表访问?(string类对象可以直接使用) 答:c++编译器并不认可将数组访问操作符和任意的类对象任意使用 被忽略的事实: a.数组访问符([])是c/c++中的内置操作符(和+,-,*,/一样的操作符) d.数组访问符的原生意义是数组访问和指针运算 3.重载数组访问操作符([]) a. 只能 通过类的 成员函数 重载(与 = 一样) b.重载函数能且仅能使用 一个参数 c.可以定义不同的多个重载函数 eg: #include <iostream> #include <string> using namespace std; class Test { int a[5]; public: int& operator [] (int i) //返回的是引用 { return a[i]; } int& operator [] (const string& s) { if( s == "1st" ) { return a[0]