C++ 关于重载问题:重载函数/重载运算符问题

老生常谈的问题,N年前仔细做过总结,现在全忘光了;

重载函数:

一定要参数列表不同,名字相同,C++编译器可以根据参数的类型自动调用;

void exc(char& a, char& b) {
	char temp = a;
	b = a;
	b = temp;
}

void exc(int& a, int& b) {
	int temp = a;
	a = b;
	b = temp;
}

void exc(string& a, string& b) {
	string temp=a;
	a = b;
	b = temp;
}

  

重载运算符:

重载运算符则是对运算符operator进行重载,方式固定,但是一定要注意什么时候用神马返回值,什么时候形参用引用传递;

还有要注意的是,重载的时候别瞎几把重载,要注意双目单目,并且是否可以被重载的问题;

#include<iostream>
#include<fstream>
#include<sstream>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;

struct node {
    string s;
    int v;
};

node operator+(node a, node b) {
    cout << a.s + b.s << endl;
    node c;
    c.s = a.s + b.s;
    c.v = a.v + b.v;
    return c;
}

void operator++(node& a) {
    a.s = "wonderful";
    a.v = 1101;
}

int main(){
    node a, b;
    cin >> a.s >> a.v;
    ++a;
    cout << a.s << " " << a.v << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/songlinxuan/p/12368226.html

时间: 2024-12-22 03:16:29

C++ 关于重载问题:重载函数/重载运算符问题的相关文章

js中没有函数重载,怎样实现函数重载的功能?

js中没有函数重载,javasript中使用可选参数:arguments实现相同的功能.. 函数在定义的时候可不定义参数: <script type="text/javascript" > function say() { for (var i = 0; i < arguments.length; i++) { alert(arguments[i].toString()); } } </script> 调用:<input type="but

C++运算符重载(友元函数方式)

我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函数有2个参数,对单目运算符,友元函数有一个参数.但是,有些运行符不能重载为友元函数,它们是:=,(),[]和->. 重载为友元函数的运算符重载函数的定义格式如下: [cpp] view plaincopy 一.程序实例 [cpp] view plaincopy 1 //运算符重载:友元函数方式 2

从一个二级题来看成员函数重载运算符和友元函数重载运算符

先上题:下列运算符都可以被友元函数重载的是: A)=,+,-,\ B)[],+,(),new C)->,+,*,>> D)<<,>>,+,* 正确答案为D 我们知道,在运算符重载,友元函数运算符重载函数与成员运算符重载函数的区别是:友元函数没有this指针,而成员函数有,因此,在两个操作数的重载中友元函数有两个参数,而成员函数只有一个. 因此,我们可以总结如下: 1.对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中

初步理解[函数重载]和[运算符重载]&#183;转

作者:黄兢成链接:https://www.zhihu.com/question/23407045/answer/24543450来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 很多疑问都是想不通那东西具体用于什么地方. 比如我初学 C++ 时,早就知道指针实际就是某个变量的地址,就是不知道具体怎么用.这感觉就仿佛学数学,我知道某定理,也知道某定理的证明是对的,但我就是不知道这东西有什么用.直到学数据结构,接触到链表,才突然明白指针. 所以语法只是初步,更重要的是要

函数重载与复制构造函数

函数重载与复制构造函数   一.函数重载 1.普通函数重载 用main函数多次重复调用一个相同名字但是不同类型的函数来处理不同类型的数据. 如 void func(int); void func(double); float func(float); void func(double); 2.成员函数的重载 我们可以将函数的重载推广到类的成员函数. Class  boy { Public: void  sum(); void  sum(int  x, int  y); } 二.函数的默认参数 在

day4 函数重载

函数的重载 1.函数重载的定义:在同一个类中,有一个以上的同名函数,只要函数的参数列表或参数类型不一样即可,与返回值无关, 这些统称为方法的重载. 2.函数的重载存在的原因:为了增强方法的阅读性,优化了程序设计. 案例1:九九乘法表 1 private static void print99() { 2 for(int i = 1 ; i<= 9 ; i ++){ 3 for(int j = 1 ; j<=i ; j++){ 4 System.out.print(i+"*"

c++中的函数重载

c++中的函数重载 什么是函数重载 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数.类型或者顺序)必须不同,这组函数被称为重载函数. 函数重载的作用 重载函数常用来实现功能类似而所处理的数据类型不同的问题,能减少函数名的数量,提高程序的可读性. 重载函数的构成说明 定义一个类,添加一系列函数名相同的函数,但参数形式各有不同,测试一下能否构成重载. #include <iostream> using names

C++的函数重载和main函数之外的工作

今天被问到一个C++的函数重载问题,一下子没反应过来,这种基础的问题竟然忘记了,以下记录一下这些忘记的内容.     函数重载 函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载.注意函数重载不能基于不同的返回值类型进行重载. 注意函数重载中的"形参表"不同,是指本质不同,不要被一些表象迷惑.main函数不能被重载. 下面三组定义本质是相同的,不是重载: 1)int sum (int &a); 和 int sum (int &)

C++基础补遗篇—函数重载与Extern C

问题引出 之前提到C存在命名冲突问题,新的C++专门为此引入了namespace机制加以改进(后文介绍),此外还有另一种机制: int add(int i, int j) {    return i+i;  } float add(float a, float b, floatc)  {    return a+b+c;   } void main() { int a = add(8, 9); float b = add(7.7, 8.8, 9.9); } 上例在C环境下不成立,因为C编译器不允

Java 构造函数和函数重载

构造函数:⑴方法名和类名相同,而且没有返回类型(包括 void 也没有): ⑵没有返回值: ⑶如果没有输入构造函数,jvm会自动帮我们创建一个不带参数,没有任何函数体的的构造函数: 如果我们手动的创建了其他构造函数,就不会帮我们创建这个不带参数的构造函数了: ⑷一般情况下,如果想要实现自己的构造方法,最好重载一个不带参数的构造方法. 函数重载:指多个函数可以使用同一个函数名,只要它们参数列表不同,将意义相近的函数,命名为相同的名称. 重载总结:⑴函数重载是指多个函数使用同一个名称: ⑵重载的条件