重载函数

类和对象(中)C++

本小妞迷上赌 提交于 2019-12-05 01:14:02
类中哪些默认的事儿…… 1. 类的6个默认成员函数: 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。 class Date{}; 2. 构造函数: 构造函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员 都有 一个合适的初始值,并且在对象的生命周期内只调用一次。 构造函数的给出方式如下,参数可以给出缺省值,也可以重载构造函数。 class Date { public: Date(int year = 2000,int month=1,int day=1) { _year = year; _month = month; _day = day; } private: int _year; int _month; int _day; }; int main() { Date d1; return 0; } 构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主 要任务并不是开空间创建对象,而是初始化对象。 其特征如下: 1、 函数名与类名相同。 2、无返回值。 3、对象实例化时编译器自动调用对应的构造函数。 4、构造函数可以重载。 5、如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定

C#函数(构造函数)的重载

只谈情不闲聊 提交于 2019-12-05 00:18:05
using System; namespace test { class Program { static void Main(string[] args) { Cat cat = new Cat();//不含参数的构造方法 Console.WriteLine("姓名是{0},年龄是{1}",cat.name,cat.age); Cat cat1 = new Cat("一只猫");//含1个参数的构造方法 Console.WriteLine("姓名是{0},年龄是{1}", cat1.name, cat1.age); Cat cat2 = new Cat("又一只猫",18);//含2个参数的构造方法 Console.WriteLine("姓名是{0},年龄是{1}", cat2.name, cat2.age); } class Cat { public string name; public int age; public Cat() { } public Cat(string nameValue) { name = nameValue; } public Cat(string nameValue, int ageValue) { name = nameValue; age = ageValue; } } } } using System; namespace test {

C++ operator关键字(重载操作符)

十年热恋 提交于 2019-12-04 22:26:27
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。 一、为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。 二、如何声明一个重载的操作符? A: 操作符重载实现为类成员函数 重载的操作符在类体中被声明,声明方式如同普通成员函数一样,只不过他的名字包含关键字operator,以及紧跟其后的一个c++预定义的操作符。 可以用如下的方式来声明一个预定义的==操作符: class person

转--C++ operator关键字(重载操作符)

好久不见. 提交于 2019-12-04 22:26:18
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解: 一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。 一、为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。 那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。 二、如何声明一个重载的操作符? A: 操作符重载实现为类成员函数 重载的操作符在类体中被声明,声明方式如同普通成员函数一样,只不过他的名字包含关键字operator,以及紧跟其后的一个c++预定义的操作符。 可以用如下的方式来声明一个预定义的==操作符: 复制代码 class

操作符[]重载

折月煮酒 提交于 2019-12-04 15:19:24
1 #ifndef _INTARRAY_H_ 2 #define _INTARRAY_H_ 3 class IntArray{ 4 private: 5 int m_length; 6 int* m_pointer; 7 IntArray(int len); 8 IntArray(const IntArray& obj); 9 bool construct();//作用:数组申请内存、赋初值 10 public: 11 static IntArray*NewInstance(int length);//创建对象函数,加static的作用?? 12 bool get(int index,int&value); 13 bool set(int index,int value); 14 int& operator[](int index);//操作符重载函数 15 int length();//老是忘记获取数组长度的函数 16 IntArray& self();//返回自身的成员函数 17 ~IntArray(); 18 }; 19 #endif//11行如果不加static报错显示为: error: cannot call member function ‘IntArray* IntArray::NewInstance(int)’ without object IntArray*a =

对Java方法、方法重载的理解

白昼怎懂夜的黑 提交于 2019-12-04 14:40:22
一、方法 1.什么是方法 方法就是一个代码片段,在其他地方被引用,类似于C语言当中的“函数”。 2.方法的命名规则 必须以字母、下划线或‘$’符号开头;可以包括数字,但不能以他开头。 3.方法的基本语法 // 方法定义 public static 方法返回值 方法名称([参数类型 形参 ...]){ 方法体代码; [return 返回值]; } // 方法调用 返回值变量 = 方法名称(实参...); 注意:方法定义时的参数称为 "形参", 方法调用时的参数称为 "实参"。 4.实例 代码实现两数相加 public static void main(String[] args) { int a = 10; int b = 20; // 方法的调用 int ret = add(a, b); System.out.println("ret = " + ret); } // 方法的定义 public static int add(int x, int y) { return x + y; } } 二、方法重载 1.什么是方法重载 同一个方法名字, 提供不同版本的实现, 称为方法重载。 2. 对于同样一个add方法,如果是有两个浮点数相加,或者是三个数相加,这里就会用到方法的重载,具体实现如下: class Test { public static void main(String[]

方法重载和重写是什么?有什么区别?

让人想犯罪 __ 提交于 2019-12-04 12:03:33
重写 :在子类中将父类的成员方法的名称保留,重新编写成员方法的实现内容,更改方法的访问权限,修改返回类型的为父类返回类型的子类。 一些规则: 重写发生在子类继承父类 参数列表必须完全与被重写方法的相同 重写父类方法时,修改方法的权限只能从小范围到大范围 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的子类(JDK1.5 及更早版本返回类型要一样,JDK1.7 及更高版本可以不同) 访问权限不能比父类中被重写的方法的访问权限更低。如:父类的方法被声明为 public,那么子类中重写该方法不能声明为 protected 重写方法不能抛出新的检查异常和比被重写方法申明更宽泛的异常(即只能抛出父类方法抛出异常的子类) 声明为 final 的方法不能被重写 声明为 static 的方法不能被重写 声明为 private 的方法不能被重写 重载 :一个类中允许同时存在一个以上的同名方法,这些方法的参数个数或者类型不同 重载条件 : 方法名相同 参数类型不同 或 参数个数不同 或 参数顺序不同 规则 : 被重载的方法 参数列表(个数或类型)不一样 被重载的方法可以修改返回类型 被重载的方法可以修改访问修饰符 被重载的方法可以修改异常抛出 方法能够在同一个类中或者在一个子类中被重载 无法以返回值类型作为重载函数的区分标准 重载和重写的区别 : 作用范围

浅谈重写与重载

谁都会走 提交于 2019-12-04 10:36:27
覆写,又称重写,就是在子类中重复定义父类方法,提供不同实现,存在于有继承关系的父子关系。当子类重写父类的虚函数后,父类对象就可以根据根据赋予它的不同子类指针动态的调用子类的方法。从示例的分析,总结覆写的基本特征包括:   在.NET中只有以virtual和abstract标记的虚方法和抽象方法才能被直接覆写。   覆写以关键字override标记,强调继承关系中对基类方法的重写。   覆写方法要求具有相同的方法签名,包括:相同的方法名、相同的参数列表和相同的返回值类型。   概念:虚方法 虚方法就是以virtual关键字修饰并在一个或多个派生类中实现的方法,子类重写的虚方法则以override关键字标记。   虚方法调用,是在运行时确定根据其调用对象的类型来确定调用适当的覆写方法。.NET默认是非虚方法,如果一个方法被virtual标记,则不可再被static、abstrcat和override修饰。 概念:抽象方法 抽象方法就是以abstract关键字修饰的方法,抽象方法可以看作是没有实现体的虚方法,并且必须在派生类中被覆写,如果一个类包括抽象方法,则该类就是一个抽象类。因此,抽象方法其实隐含为虚方法,只是在声明和调用语法上有所不同。abstract和virtual一起使用是错误的。   重载基础篇   重载,就是在同一个类中存在多个同名的方法

C++_学习笔记

旧时模样 提交于 2019-12-04 08:19:21
C++ 面向对象特征:封装——抽象——继承——多态 https://www.runoob.com/ <命名空间> —————————————————————————————————————————————————————————————————————————————————————————— #include <iostream> 1 using namespace std; 2 using std::变量; 3 std::变量; cout cin 定义: namespace spaceA{ int a = 10; namespace spaceB{ struct std{ int age ; } } } 使用: using namespace spaceA; using spaceA::a; spaceA::a; <bool增强> —————————————————————————————————————————————————————————————————————————————————————————— bool a = true ; 1 bool b = false; 0 sizeof(a) = 一个字节; <三目增强> ———————————————————————————————————————————————————————————————————————————

C++面向对象 运算符重载函数

谁说我不能喝 提交于 2019-12-04 03:58:26
第十二章 运算符重载 1. C++中可以称运算符为运算符函数。 2. 运算符函数可以作为某个类的成员函数,也可以作为普通的C++函数。(常作为类的友元函数) 3. 重载运算符时,至少要有一个操作数是用户自定义的类类型(如果都是基本数据类型还有基本数据类型的指针的话,定义已经存在) 4. 重载的运算符函数不能是类的静态成员函数。 5. 重载运算符时需要遵循的规则: (1) 尽可能用引用型的参数,尽可能加const限制(避免拷贝构造函数,保护实参操作数,同时使运算符具有与常量运算的功能) (2) 尽可能采用引用返回(避免构造临时对象,使运算表达式成为左值) (3) 如果第一个操作数可能不是本类的对象的时候,必须重载为友元函数。 例子:希望日期类对象Date d(2008,8,8);与整数int n=6;进行相加运算。运算表达式d+n与n+d执行的使不同的运算符函数。前者可以作为类的成员函数,d作为第一个操作数。而后者只能作为友元函数来定义,将整数n作为第一个操作数。 6. 重载算术运算符(加减乘除) 不修改操作数,一般将运算结果存放在其他对象或者变量里然后值返回。 例如: Date operator+(const Date &d, int n) //友元函数 { Date temp(d); int m=temp.DaysOfYear()+n; temp.setDate(d.year,m