概述
友元函数实现复数加法
运算符重载实现思路:成员函数和友元函数,两种区别在于:
1.成员函数具有this指针,友元函数没有
2.传递参数不同,实现代码不同,应用场合也不同
两者相同点是:运算符的使用方法一样
#include <iostream>
using namespace std;
class Complex
{
public:
Complex()
{
}
Complex(int real,int imag)
{
this->real_ = real;
this->imag_ = imag;
}
~Complex()
{
cout << "析构函数" << endl;
}
friend Complex operator+(Complex & a, Complex & b)
{
Complex res;
res.real_ = a.real_ + b.real_;
res.imag_ = a.imag_ + b.imag_;
return res;
}
void printFun()
{
cout << "实部是:" << this->real_ << "
" << "虚部是:" << this->imag_ << endl;
}
private:
int real_;
int imag_;
};
void main()
{
int a = 10, b = 20;
int c = a + b;
cout << c << endl;
Complex c1(10, 20);
Complex c2(30, 40);
//Complex c3 = operator+(c1, c2);//实现了复数的加法
Complex c3 = c1+c2;//友元函数实现运算符重载,其本质是函数
c3.printFun();
cin.get();
}
总结思路:运算符重载函数,根据函数的3要素,推导出函数原型 1.函数名称:operator 运算符() 2.函数参数:一元一个参数,二元二个参数,等等 3.函数返回值:根据业务需要而来
友元函数实现运算符重载
友元函数实现*的demo
1.operator*()
2.operator*(Complex& a,Complex& b);
3.Complex operator*(Complex& a,Complex& b);
4.函数实现
Complex operator*(Complex& a,Complex& b)
{
Complex temp(a.real_ * b.real_,a.imag_ * b.imag_);
return temp;
}
注:这里要想操作类的私有成员变量,需要将此函数变为友元函数,加上关键字friend 即可
成员函数实现运算符重载
1.c1.operator*(c2);//成员函数的调用需要对象,提取出一个参数
2.Complex operator*(Complex &c)
{
Complex temp(this->real_ * c.real_,this->imag_ * c.imag_);
return temp;
}
总结:二元运算符一个参数可以通过this指针隐含实现
一元运算符重载
前置++ 友元函数实现
1.operator++
2.operator++(int right);
3.Complex& operator ++(Complex &right)
{
right.real_++;
right.imag_++;
return right;
}
前置++ 成员函数实现
1.1.operator++
2.obj.operator++();
3.Complex& operator ++()
{
this->real_++;
this->mag_++;
return *this;
}
问题:函数返回值为什么是引用类型?
引用类型可避免调用类的拷贝构造函数,提高程序效率,同时节省内存空间。
后置–友元函数实现
1.operator–(Complex &c);
2.Complex operator–(Complex &c);//先返回再–,所以这里需要临时变量存储–之前的内容
3.friend Complex operator–(Complex &c,int)
{
Complex temp = c;
c.real_–;
c.imag_–;
return temp;
}
注意:前置与后置函数声明完全一样,编译出错。所以从函数重载的角度,给后置函数增加了一个参数int,只是为了区别于前置
后置–成员函数实现
1.operator–;
2.obj.operator–();
3.Complex operator–(int)
{
Complex temp = *this;
this->real_–;
this->imag_–;
return temp;
}
最后
以上就是阔达煎蛋为你收集整理的C++——运算符重载(二)的全部内容,希望文章能够帮你解决C++——运算符重载(二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复