习题及实验讲解1011章_第1页
习题及实验讲解1011章_第2页
习题及实验讲解1011章_第3页
习题及实验讲解1011章_第4页
习题及实验讲解1011章_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/* 习题10.13:定义一个矩形类Rect,矩形的左上角坐标(Left,Top)和右下角坐标(Right,Bottom)定义为私有数据成员,成员函数包括计算面积、计算周长、输入和输出。定义Rect类数组,计算各个矩形的面积和周长并输出。*/*#include<iostream>using namespace std;class Rect private: float left, top; float right, bottom; float length, area; /此两成员可不用 public: void input(float le, float to, float ri

2、, float bo) /输入函数,输入数据成员 left=le; top=to; right=ri; bottom=bo; void input( ) /重载输入函数,用于数组输入 cout<<"Input left, top and right, bottom:" cin>>left>>top>>right>>bottom; /无参,直接输入数据成员的值 float getLength( ) /无参,有返回值(也可无返回值) length=(top-bottom)+(right-left)*2; return

3、length; void getArea( ) /无返回值 area=(top-bottom)*(right-left); void Output(); /体内声明函数 ;void Rect:Output( ) /体外定义函数 cout<<"(left,top)="<<'('<<left<<','<<top<<')'<<endl; cout<<"(right,bottom)="<<'('

4、;<<right<<','<<bottom<<')'<<endl; cout<<"Length="<<getLength()<<','<<"Area="<<area<<endl; /用返回值int main(void) Rect rect1; /定义Rect类的对象rect1 rect1.input(2,4,4,2); /rect1的数据成员的值作为实参输入 rect1.get

5、Length(); /数据的输入、计算和输出均通过对象的函数成员进行 rect1.getArea(); rect1.Output(); Rect r2; /定义Rect类的对象数组 int i; for(i=0; i<2; i+) ri.input(); /键盘输入数组元素,此时用前一种实参的输入方式就不方便 ri.getLength(); ri.getArea(); ri.Output(); return 0; 此题中对象数组数据的输入未采用构造函数的形式,而是采用专门的输入函数。/* 习题10.17 设计一大小可变的整形数组类: class CArrayint size; /数组的元

6、素个数int *p; /指向为数组申请的动态内存public:CArray(int=100); /数组缺省大小为100个元素CArray(); /析构函数int &GetElem(int i); /取或设置数组中的第i个元素void Input(); /为数组所有元素输入数据void Print(); /输出数组中的所有元素void Sort() /对数组元素进行排序int Search(int); /在数组中查找指定值;首先完成CArray类中成员函数的定义,然后设计主函数,定义CArray的对象,测试所定义的类CArray。*/*#include<iostream>us

7、ing namespace std;class CArray int size; int *p;public: CArray(int s=3) /构造函数,默认值用3,为了调试方便 size=s; p=new intsize; /申请动态内存,注意为号,用()合法,编译不会出错,但含义不同。 cout<<"构造函数被调用n" CArray() delete p; /释放内存 cout<<"析构函数被调用n" int& GetElem(int i); /取或设置指定元素,以下均为函数声明 void Input(); /输入数

8、组元素 void Output(); /输出数组元素 void Sort(); /数组元素排序 int Search(int); /查找给定值,见例7.5,移植类似于Sort函数,此处不再重复;int& CArray:GetElem(int i) return *(p+i); /返回值类型为整形引用,返回值为指针所指的整形元素void CArray:Input() cout<<"输入数组元素:n" for (int j=0; j<size; j+) cin>>pj; /*p+不行,p会改变,影响后面p的使用及删除void CArray:

9、Output() for (int j=0; j<size; j+) cout<<pj<<' ' cout<<endl; void CArray: Sort() /冒泡排序 float t; for(int i=1; i<size; i+) /共size-1趟排序 for(int j=0; j<size-i; j+) /第i趟排序有前size-i个数 if(pj>pj+1) /相邻比较,若逆序则交换 t=pj; pj=pj+1; pj+1=t; void main(void) int size, k, j;cout&l

10、t;<"输入数组大小:"cin>>size;CArray ar1(size); /无参则用默认值 ar1.Input(); ar1.Output(); cout<<"输入需要设置的元素的位置:"<<endl;cin>>k; ar1.GetElem(k)=10; /置第k个元素的值cout<<"输入需要取的元素的位置:"<<endl;cin>>j; cout<<ar1.GetElem(j)<<endl; /取第j个元素的值

11、ar1.Sort(); /排序 ar1.Output(); 此题要注意掌握动态数组作为类的成员,其构造函数的设计及数组元素输入的方法。/* 习题11-9:定义矩形类Rectangle,其数据成员left和right是Point类的对象,分别表示矩形的左上角和右下角坐标。试为Rectangle类重载运算符“<”和“>”,实现两个矩形对象面积大小的比较*/*#include<iostream>using namespace std;class Point float x, y;public: Point(float a, float b) /构造函数初始化x、y x=a;

12、y=b; Show( ); /调用函数成员Show float Getx( ) return x; /取x,用于间接访问私有成员 float Gety( ) return y; /取y,用于间接访问私有成员 void Show( ) cout<<"(x, y)="<<'('<<x<<','<<y<<')'<<endl; /输出x、y的值;class Rect /定义类Rect Point left, right; /Point类的对象成员pub

13、lic: /构造函数初始化对象成员Rect(float x1, float y1, float x2, float y2): left(x1, y1), right(x2, y2) /函数体不可缺 float getArea( ) /计算面积的函数,无参 return (left.Gety()-right.Gety()*(right.Getx()-left.Getx(); /用对象的成员函数访问私有成员 friend int operator>(Rect &r1, Rect &r2) /重载“>”为友元运算符 if(r1.getArea()>r2.getAre

14、a() return 1; else return 0; /体内定义函数体 friend int operator<(Rect &r1, Rect &r2); /重载“<”,体内声明; int operator<(Rect &r1, Rect &r2) /体外定义函数体 if(r1.getArea()<r2.getArea() return 1; else return 0; int main(void) Rect r1(2, 4, 4, 2), r2(1, 4, 4, 1); /定义两个Rect对象,并初始化cout<<&q

15、uot;r1的面积:"<<r1.getArea()<<" " /计算并输出对象的面积<<"r2的面积:"<<r2.getArea()<<endl;if(r1>r2) cout<<"r1面积大于r2面积"<<endl; /调用>运算符else cout<<"r1面积小于r2面积"<<endl; if(r1<r2) cout<<"r1面积小于r2面积"&

16、lt;<endl; /调用<运算符else cout<<"r1面积大于r2面积"<<endl; return 0; /* 习题11-12:定义一个M×N的实型矩阵Matrix,重载+、-和=运算,实现矩阵的加,减和赋值运算。*/#include<iostream>using namespace std;/先简单点,定义一个固定的矩阵,主要练习重载的方法class Matrix float m22;public: Matrix(float m11=0, float m12=0, float m21=0, float m

17、22=0) /构造函数 m00=m11; m01=m12; m10=m21; m11=m22; /初始化x、y void Show( ) /输出矩阵元素 for(int i=0;i<2;i+) for(int j=0;j<2;j+) cout<<'t'<<mij; cout<<endl; cout<<endl; Matrix operator+(Matrix&); /重载为类运算符,体外定义函数体 Matrix& operator=(Matrix &m2) /重载为类运算符, 返回值为对象引用

18、for(int i=0; i<2; i+) /体内定义函数体 for(int j=0;j<2;j+) mij=m2.mij; /第一操作数(左操作数)为当前对象 return *this; /返回当前对象,this指针指向当前对象 friend Matrix operator-(Matrix &, Matrix &); /重载为友元运算符; /类运算符体外定义函数体Matrix Matrix: operator+(Matrix &m2) /形参只有一个,为第二操作数 Matrix t; /定义临时对象t,存放相加结果 for(int i=0;i<2;i

19、+) for(int j=0;j<2;j+) t.mij=mij+m2.mij; /第一操作数(左操作数)为当前对象 return t; /返回结果对象/友元运算符体外定义函数体Matrix operator-(Matrix &m1, Matrix &m2) /第一操作数需显式作为形参 Matrix t; for(int i=0;i<2;i+) for(int j=0;j<2;j+) t.mij=m1.mij-m2.mij; /注意与上面比较 return t; int main(void) Matrix m1(1, 2, 3, 4), m2(4, 3, 2,

20、 1), m3; /定义Matrix对象,并初始化 cout<<"m1:" m1.Show(); /输出各个矩阵元素 cout<<"m2:" m2.Show();cout<<"m3:" m3.Show(); m3=m1+m2; /调用+运算符 m2=m1; /调用=运算符m1=m3-m2; /调用-运算符cout<<"m1+m2:" m3.Show(); /输出各个运算结果cout<<"m2=m1:" m2.Show();cout<

21、;<"m3-m2:" m1.Show(); return 0;/编写矩阵大小可变的程序#include<iostream>using namespace std;class Matrixint rows, cols;double *t;public:Matrix(int r, int c) /构造函数rows=r, cols=c;t=new doublerows*cols;Matrix(Matrix& c) /拷贝构造函数,相当于重载 rows=c.rows, cols=c.cols;t=new doublerows*cols; /生成一个临时动态

22、对象for(int i=0;i<rows;i+)for(int j=0;j<cols;j+)ti*cols+j=c.ti*cols+j;Matrix() /析构函数 if(t)delete t;void operator=(Matrix&); /重载 =、+、- Matrix operator+(Matrix&); Matrix operator-(Matrix&); ;void Matrix: operator=(Matrix& p) for(int i=0; i<rows; i+)for(int j=0; j<cols; j+)ti*cols+j=p.ti*cols+j;Matrix Matrix:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论