重载函数

【转】重载(overload)、覆盖(override)、隐藏(hide) 辨析

不问归期 提交于 2019-11-26 17:42:55
对这些概念老是记不清楚,转了一篇比较通俗的文章帮助记忆,高手请绕道^_^~ 写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),常常把重载(overload)和覆盖(override)搞错! 我们先来看一些代码及其编译结果。 实例一:     #include "stdafx.h" #include class CB { public: void f(int) { cout << "CB::f(int)" << endl; } };   class CD : public CB { public: void f(int,int) { cout << "CD::f(int,int)" << endl; } void test() { f(1); } };  int main(int argc, char* argv[]) { return 0; } 编译了一下 error C2660: 'f' : function does not take 1 parameters 结论:在类CD这个域中,没有f(int)这样的函数,基类中的void f(int)被隐藏 。 如果把派生CD中成员函数void f(int,int

c++知识点总结3

强颜欢笑 提交于 2019-11-26 17:30:27
http://akaedu.github.io/book/ week1 引用 :相当于变量的别名。下面r和n就相当于同一回事 int n=4; int &r=n; 引用做函数参数: void swap(int &a, int &b){ //a等价于n1, b等价于n2 int tmp; tmp=a; a=b; b=tmp; } int n1, n2; swap(n1, n2); const int &r=n; //不能通过常引用r来修改n的内容。 const const int MAXAL=23; const char* NAME="pentium"; int n; const int* p=&n; //不能通过常量指针p来修改n的内容int* q=p; //不能将常量指针赋给非常量指针,反之可以 void func(const char* p){ .... 不能提供常量指针p修改内容 } 动态内存分配 int *pn=new int; *pn=555; //动态分配出sizeof(int)这么大的内存,并将其起始地址返回给pn int *pm=new int[6]; pm[5]=666; //动态分配数组//new出来的对象必须手动delete。否则即使运行结束了系统也不会自行销毁 delete pn; delete[] pm; inline:内联函数

C++ 运算符 -> 重载

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-26 17:18:18
运算符'->',被称为类成员访问运算符,可以被重载。 它被定义用于为一个类赋予"指针"行为。即可以使类对象可以通过运算符'->'访问类中的成员函数及成员变量。 运算符 '->' 重载必须是一个成员函数的形式。而且返回类型必须是指针或者是类的对象。 运算符 -> 通常与指针引用运算符 * 结合使用,用于实现"智能指针"的功能,本文没有介绍。 下面介绍一种'->'重载的实例: #include <iostream> #include <vector> using namespace std; class Dog{ public:   static int i;   static int j;   void fun2()   {     cout << i << endl;     cout << j << endl;   } }; int Dog::i = 0; int Dog::j = 1; class Cat { public:   Dog dog1;   Dog* operator->()   {     return &dog1;   } }; int main(int argc, char const *argv[]) {   /* code */   Dog dog;   dog.fun2();   Cat cat;   //通过重载运算符'->'

C++操作符重载

南笙酒味 提交于 2019-11-26 17:17:09
C++操作符重载 操作符重载的规则与方法 将操作符重载定义为类的成员函数 总结: 操作符重载的规则与方法 C++中的重载能够扩展操作符的功能 操作符的重载以函数的方式进行 本质:用特殊形式的函数扩展操作符的功能 通过operator关键字可以定义特殊的函数 operator的本质是通过函数重载操作符 # include <stdio.h> class Complex { int a ; int b ; public : Complex ( int a = 0 , int b = 0 ) { this - > a = a ; this - > b = b ; } int getA ( ) { return a ; } int getB ( ) { return b ; } friend Complex operator + ( const Complex & c1 , const Complex & c2 ) ; //为了在重载函数中少写调用成员函数的步骤,所以这里使用了友元 } ; //重载加号操作符,使得可以计算负数的加法 Complex operator + ( const Complex & c1 , const Complex & c2 ) { Complex ret ; ret . a = c1 . a + c2 . a ; ret . b = c1 . b + c2 .

10.新手入门:C++中的函数重载

穿精又带淫゛_ 提交于 2019-11-26 13:54:38
函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作的称呼。 #include <iostream> using namespace std; int test(int a,int b); float test(float a,float b); int main(void){ cout<<test(1,2)<<endl<<test(2.1f,3.14f)<<endl; return 0; } int test(int a,int b){ return a+b; } float test(float a,float b){ return a+b; } C++内部利用一种叫做粉碎的机制来内部重命名同名函数。 来源: https://blog.csdn.net/MJ_BH/article/details/98882611

运算符优先级

 ̄綄美尐妖づ 提交于 2019-11-26 12:24:41
运算符优先级 优先级 优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。 相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是 单目运算符 、 条件运算符 、 赋值运算符 。 基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。 请特别注意:1 << 3 + 2 && 7等价于 (1 << (3 + 2))&&7. 算术运算 > 移位运算 > 关系运算 > 位运算 > 逻辑运算 > 赋值运算 (算术移 为 关位逻 赋值) a = 2+58>>2>13|15&&8 = 1 运算符优先级C语言优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[整型表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名 -> 成员选择(指针) 对象指针->成员名 2 - 负号运算符 -算术类型表达式 右到左 单目运算符 (type) 强制类型转换 (纯量数据类型)纯量表达式 ++ 自增运算符 ++纯量类型可修改左值表达式 单目运算符 -- 自减运算符 --纯量类型可修改左值表达式 单目运算符 * 取值运算符 *指针类型表达式 单目运算符 & 取地址运算符 &表达式 单目运算符 ! 逻辑非运算符 !纯量类型表达式 单目运算符 ~ 按位取反运算符

重载函数和重载运算符

安稳与你 提交于 2019-11-26 12:11:54
C++允许在同一个作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但他们的参数列表和定义(实现)不相同。 当调用一个重载函数或重载运算符时,编译器通过把函数所使用的参数类型和定义中的参数类型进行比较,决定选用最合适的定义。 选择最合适的重载函数或重载运算符的过程,称为重载决策。 C++函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(参数个数,类型或者顺序)必须不同,不能仅通过返回类型的不同来重载函数。 /*** overload.cpp ***/ #include<iostream> using namespace std; class printData { public: void print(int i) { cout << "integer is : " << i << endl; } void print(double f) { cout << "flota is : " << f << endl; } void print(char c[]) { cout << "char is : " << c << endl; } }; int main() { printData pd; pd.print(5); pd.print(300.1

重载运算符语法讲解

心不动则不痛 提交于 2019-11-25 23:02:34
重载运算符 这篇随笔我来讲解一下C++语言中重载运算符的相关知识。 一、重载运算符的用途 这是一个比较 哲学 的问题:我们为什么要重载运算符? 理由就是,我们C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类型进行运算的话,则需要重载运算符,我们可以把重载运算符理解成对已有的运算符的一种重新定义。 比如: double a,b,c; a=1/3; b=1/2; c=a+b; printf("%lf",c); 这段程序输出的肯定不是两个分数相加的结果。 这时候我们就可以重载运算符+。 二、重载运算符的实现 语法格式如下 (非常重要) <返回类型> operator <运算符符号>(<参数>) { <定义>; } 这里我们举一个例子。 在优先队列(priority_queue)中,存储的元素较大的会被放到堆顶。如果存的是int或者string等类型还好办(因为他们本身就可以互相比较大小),如果是我们自定义的结构体类型,那就需要重载<运算符。 比如: struct node { int id; double x,y; }//定义结构体 bool operator <(const node &a,const node &b) { return a.x<b.x && a.y<b.y; }//重载运算符“<

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

非 Y 不嫁゛ 提交于 2019-11-25 19:28:21
一、C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 1.1 C++ 中的函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。 下面的实例中,同名函数 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 (