c++运算符重载和多态性实验报告
更新时间:2023-10-17 01:31:01 阅读量: 综合文库 文档下载
实验5 运算符重载和多态性
班 级
学号(最后两位)
姓 名
成 绩
一、实验目的
1.掌握用成员函数重载运算符的方法 2.掌握用友元函数重载运算符的方法
3.理解并掌握利用虚函数实现动态多态性和编写通用程序的方法 4.掌握纯虚函数和抽象类的使用 二、实验内容
1.复数类加减法乘除运算 (用成员函数定义运算符重载)。 复数类的定义: class complex //复数类声明 { public: //外部接口 complex(double r=0.0,double i=0.0) //构造函数 {real=r,imag=i;}
complex operator +(complex c2); //运算符\重载成员函数 complex operator - (complex c2); //运算符\重载成员函数 complex operator *(complex ); //运算符\重载成员函数 complex operator /(complex); //运算符\重载成员函数 complex operator =(complex c2); //运算符\重载成员函数 void display(); //输出复数 private: //私有数据成员 double real; //复数实部 double imag; //复数虚部 };
实验代码:
#include
public: Complex()
{
real=0; imag=0; }
Complex(double r,double i)
{
real=r; imag=i; }
Complex operator+(Complex &c2); Complex operator-(Complex &c2); Complex operator*(Complex &c2); Complex operator/(Complex &c2); void display(); private:
double real; double imag; };
Complex Complex::operator+(Complex &c2) {
Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag; return c; }
Complex Complex::operator-(Complex &c2) {
Complex c;
c.real=real-c2.real; c.imag=imag-c2.imag; return c; }
Complex Complex::operator*(Complex &c2) {
Complex c;
c.real=real*c2.real-imag*c2.imag;
c.imag=imag*c2.real+real*c2.imag; return c; }
Complex Complex::operator/(Complex &c2) {
Complex c;
c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); return c; }
void Complex::display()
{cout<<\int main() {
Complex c1(4,6),c2(3,7),c3; cout<<\ c1.display(); cout<<\ c2.display(); int i,j=1; while(j) {
cout<<\
cout<<\复数之和\\n\ cout<<\复数之差\\n\ cout<<\复数之积\\n\
cout<<\复数之商\\n\cout<<\退出\\n\ cout<<\请选择(0--4) \
cin>>i; switch(i) {
case 1: c3=c1+c2;
cout<<\break;
case 2: c3=c1-c2; cout<<\c3.display();break; case 3: c3=c1*c2; cout<<\
c3.display(); break;
case 4: c3=c1/c2; cout<<\c3.display(); break; case 0: j=0; break; } } }
测试结果:
2.复数类比较运算 (用友元函数定义运算重载)。 注意:
1)复数类比较运算按复数的模比较两个复数的大小。
2)复数相等判断当两个复数的实部和虚部都相等,两个复数才相等,否则不相等。
类的定义
class complex //复数类声明 {
public: complex(double r=0.0,double i=0.0)
{real=r;imag=i;} //构造函数
friend int operator> (complex c1,complex c2); //运算符\重载友元函数
friend int operator>=(complex c1,complex c2); //运算符\重载友元函数 friend int operator <(complex c1,complex c2); //运算符\重载友元函数 friend int operator<=(complex c1,complex c2); //运算符\重载友元函数 friend int operator ==(complex c1,complex c2); //运算符\重载友元函数 friend int operator !=(complex c1,complex c2); //运算符\重载友元函数 void display( ); //显示复数的值 private: //私有数据成员 double real; double imag; };
实验代码:
#include\#include\
class complex {
public:
complex(double r=0.0,double i=0.0) {
real=r;imag=i;
}
friend bool operator> (complex c1,complex c2);
friend bool operator>=(complex c1,complex c2);
friend bool operator< (complex c1,complex c2); friend bool operator<=(complex c1,complex c2); friend bool operator==(complex c1,complex c2); friend bool operator!=(complex c1,complex c2); void display( ); private: double real; double imag; };
bool operator>(complex c1,complex c2) {
if(sqrt(c1.real*c1.real+c1.imag*c1.imag)>sqrt(c2.real*c2.real+c2.imag*c2.imag)) return true; else
return false; }
bool operator>=(complex c1,complex c2) {
if(sqrt(c1.real*c1.real+c1.imag*c1.imag)>sqrt(c2.real*c2.real+c2.imag*c2.imag)||sqrt(c1.real*c1.real+c1.imag*c1.imag)==sqrt(c2.real*c2.real+c2.imag*c2.imag)) return true; else
return false; }
bool operator<(complex c1,complex c2) {
if(sqrt(c1.real*c1.real+c1.imag*c1.imag) return false; } bool operator<=(complex c1,complex c2) { if(sqrt(c1.real*c1.real+c1.imag*c1.imag) return false; } bool operator==(complex c1,complex c2) { if(c1.real==c2.real&&c1.imag==c2.imag) return true; else return false; } bool operator!=(complex c1,complex c2) { if(c1.real!=c2.real||c1.imag!=c2.imag) return true; else return false; } void complex::display() { cout<<\} void compare(complex &c1,complex &c2) { if(operator>(c1,c2)==1) {c1.display();cout<<\ {c1.display();cout<<\ {c1.display();cout<<\ {c1.display();cout<<\ {c1.display();cout<<\{c1.display();cout<<\ int main() {
正在阅读:
c++运算符重载和多态性实验报告10-17
公安院校学生养成教育浅探11-28
半索动物门 脊索动物门圆口纲鱼纲 两栖纲爬行纲鸟纲哺乳纲练习 -04-15
英语写作 - lesson 2-loose, periodic, balanced sentences03-17
应届毕业生求职简历模板参考07-01
人工挖孔灌注桩施工组织设计09-25
部分高校人文地理真题09-28
数字电子技术试卷(07)10-20
如何纠正宝宝不愿吃蔬菜的不良习惯12-05
2022中秋节前廉政主题讲话稿范文03-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- c++
- 多态性
- 运算符
- 重载
- 实验
- 报告