12周 项目一(2)
2016-05-26 09:02
246 查看
/* *Copyright (c)2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:main.cpp *作 者:肖雪 *完成日期:2016年5月26日 *版 本 号:v1.0 *问题描述:请用类的友元函数,而不是成员函数,再次定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除 */ #include <iostream> using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} friend Complex operator+(Complex &c1,Complex &c2); friend Complex operator-(Complex &c1,Complex &c2); friend Complex operator*(Complex &c1,Complex &c2); friend Complex operator/(Complex &c1,Complex &c2); void display(); private: double real; double imag; }; // (a+bi)+(c+di)=(a+b)+(c+d)i; Complex operator+(Complex &c1,Complex &c2) { Complex c; c.real=c1.real+c2.real; c.imag=c1.imag+c2.imag; return c; } // (a+bi)-(c+di)=(a-b)+(c-d)i; Complex operator-(Complex &c1,Complex &c2) { Complex c; c.real=c1.real-c2.real; c.imag=c1.imag-c2.imag; return c; } // (a+bi)*(c+di)=(ac-bd)+(bc+ad)i; Complex operator*(Complex &c1,Complex &c2) { Complex c; c.real=c1.real*c2.real-c1.imag*c2.imag; c.imag=c1.imag*c2.real+c2.imag*c1.real; return c; } // (a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i Complex operator/(Complex &c1,Complex &c2) { Complex c; c.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); c.imag=(c1.imag*c2.real-c2.imag*c1.real)/(c2.real*c2.real+c2.imag*c2.imag); return c; } void Complex::display() { cout<< "(" <<real<< "," <<imag<< "i)" <<endl; } int main() { Complex c1(3,4),c2(5,-10),c3; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); c3=c1+c2; cout<<"c1+c2="; c3.display(); c3=c1-c2; cout<<"c1-c2="; c3.display(); c3=c1*c2; cout<<"c1*c2="; c3.display(); c3=c1/c2; cout<<"c1/c2="; c3.display(); return 0; }
学习心得:
成员函数和友元函数区别:
相同点:
对类的存取方式相同,可以直接存取类的任何存取控制属性的成员
可以通过对象存取形参、函数体中该类类型对象的所有成员
不同点:
成员函数有this指针,友元函数没有
友元函数不能被继承,就像父亲的朋友不一定是儿子的
相关文章推荐
- 第十三周项目1:阅读程序,并写出运行结果(2)虚析构函数
- Windows下python2.7.8安装图文教程
- 深复制体验2
- 第十一周上机实践项目2(1):存储班长信息的学生类
- 类级别的插件开发
- 跳马问题
- 探索 Python 代码对象
- HDU 2200 Eddy's AC难题(组合数学)
- 10.Spark Streaming源码分析:Receiver数据接收全过程详解
- 细数5款主流NoSQL数据库到底哪家强?
- 第12周项目1实现复数类的运算符重载3
- 百度 API 生成短网址自己测试的例子
- 第十三周项目—阅读程序,并运行结果(纯虚函数)
- 深入理解JavaScript系列+ 深入理解javascript之执行上下文
- 第十一周阅读项目(5)
- 猴子吃桃问题
- Random Forest 随机森林
- 基于FS4412嵌入式系统移植(8) linux内核调试之printk
- Java中判断对象是否相等的equals()方法使用教程
- css word-wrap和word-break强制换行