关于重载理解

函数重载:
首先函数类型包括的内容有1.返回值的类型,2.参数的个数和类型,
3.是否是const,4.异常规范说明
这些条件一个不相同那就是不同的函数,而能构成重载(即相同函数名不同函数实现)的有:条件2,条件3
一个理解原则:
哪些条件在函数运行之前需确定,那些就能构成的重载
因为重载解析,就是编译器在选择哪个函数实现被运行,这当然是在函数执行之前进行的了,所以
条件1函数返回值,是在函数运行之后才得到,所以并不能构成重载
条件4异常规范,也需函数运行之后,才能知道抛出不抛出异常,抛出什么类型的异常,所以也不能

而类的成员函数与外部域的同名函数,则覆盖不重载,利用是可见域的概念
派生类的同名函数也覆盖基类的同名函数(参数并不相同),是从设计方面的考虑,防止个别情况,详见effective item50(似乎^_^)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++运算符重载是一种特殊的函数重载,它允许我们自定义类的操作符行为,使得对象可以像内置类型一样进行运算,例如加减乘除等运算。运算符重载的语法形式如下: ``` 返回类型 operator 运算符符号(形参列表) { // 函数体 } ``` 其中,`operator`是关键字,后面跟上要重载的运算符符号,形参列表可以为空或者包含任意数量的参数。重载运算符时,我们需要将其定义为类的成员函数或全局函数,具体视运算符的特性而定。 例如,我们可以定义一个名为`Complex`的类,实现复数的加法和减法运算符重载。其代码示例如下: ```c++ #include <iostream> class Complex { public: Complex(double real = 0.0, double imag = 0.0) : m_real(real), m_imag(imag) {} Complex operator+(const Complex& other) const { return Complex(m_real + other.m_real, m_imag + other.m_imag); } Complex operator-(const Complex& other) const { return Complex(m_real - other.m_real, m_imag - other.m_imag); } void print() const { std::cout << m_real << "+" << m_imag << "i" << std::endl; } private: double m_real; double m_imag; }; int main() { Complex c1(1, 2); Complex c2(3, 4); Complex c3 = c1 + c2; c3.print(); // 输出:4+6i Complex c4 = c2 - c1; c4.print(); // 输出:2+2i return 0; } ``` 在上面的示例中,我们定义了一个名为`Complex`的类,其中包含实部和虚部两个私有数据成员。我们重载了加法运算符和减法运算符,使得两个`Complex`对象可以通过`+`和`-`进行运算。我们定义了两个成员函数`operator+`和`operator-`,它们分别重载了加法和减法运算符。这两个函数的返回类型都是`Complex`,并且都是常量成员函数,因为它们不会修改类的数据成员。我们还定义了一个成员函数`print`,用于打印复数对象的实部和虚部。在`main`函数中,我们创建了两个`Complex`对象`c1`和`c2`,并分别对它们进行加法和减法运算,得到了结果`c3`和`c4`。最后,我们分别输出了这两个结果对象的实部和虚部。 通过运算符重载,我们可以使得对象的运算行为更加符合直觉,使得代码更加易读易懂。同时,运算符重载也为我们提供了一种自定义类型的运算方式的途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值