【C++面向对象】重载

重载简述

重载是C++面向对象编程领域的重要概念。C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载运算符重载

对于重载函数而言,有一个基本原则:重载的函数两两之间的参数列表互不相同。参数列表不同是指参数的数量不同,或者参数的类型不同,但C++并不接受参数数量相同且参数类型对应相同(即使参数名称不同)或者仅返回值类型不同的函数重载。

当调用重载的函数或运算符时,编译器将会一一比对参数列表,找到符合要求的函数。这个过程叫做重载决策

函数重载

函数重载的基本方法是,定义两个或两个以上具有相同名称、参数列表符合函数重载要求的函数。以下是一个实例:

int add(int a, int b)
{
	return a + b;
}

double add(double a, double b)
{
	return a + b;
}

请注意:下面的代码

int add(int a, int b)
{
	return a + b;
}

double add(int a, int b)
{
	return (double)(a + b);
}

是不能通过编译的,报错:

无法重载仅按返回类型区分的函数

即使将第二个add函数中的ab换成cd,也会出现同样的报错。

运算符重载

如果想要根据不同的功能重载运算符,需要使用operator关键字。以下是一个实例,展现了对于类实现的对+的重载:

class node
{
private:
	int num;
	int weight;
public:
	node operator+(const node&);
};

node node::operator+(const node& b)
{
	node n;
	n.num = this->num + b.num;
	n.weight = this->weight + b.weight;
	return n;
}

请注意:在某些编译器中(例如VS 2019),不允许原本的运算符可以对重载的运算符的参数进行操作。例如在对+进行重载时,不允许参数是intdouble等等诸如此类的基本类型。

不可重载的运算符

以下是不可重载的运算符:

  • .成员访问运算符
  • .*->*成员指针访问运算符
  • ::域名解析运算符
  • sizeof字长运算符
  • ?:条件运算符
  • #预处理符号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值