《C++程序设计》上机指导与补充习题(5)

2019-01-27 14:32

二、实验内容

1.设计并测试点类Point,其数据成员是直角坐标系的点坐标,友元函数distance用来计算两点间的距离。

2.设计一个书类Book,能够保存书名、定价,所有书的本数和总价。

实验七、运算符重载(2学时) 一、实验目的

1.掌握运算符重载的规则。

2.掌握几种常用的运算符重载的方法。 3.了解转换构造函数的使用方法。

4.了解在Visual C++6.0环境下进行运算符重载要注意的问题。

二、实验内容

1.阅读下面的程序,写出程序运行的结果。 (1)

#include class ABC{ int a,b,c; public: ABC(int x,int y,int z):a(x),b(y),c(z){} friend ostream &operator<<(ostream &out,ABC& f); };

ostream &operator<<(ostream &out,ABC& f) { out<<\ return out; }

int main(){ ABC obj(10,20,30); cout<

#include class Number{ int n; public:

Number(int x):n(x){} Number& operator++(){ ++n; return *this; } Number& operator++(int){ n++; return *this;} friend Number &operator--(Number &o); friend Number &operator--(Number o,int); void display(){cout<<\ \};

Number &operator--(Number &o){--o.n; return o; } Number &operator--(Number o,int){o.n--; return o; } int main(){ Number N1(10); ++ ++ ++N1; N1.display(); N1++; N1.display(); --N1; N1.display(); N1-- -- --; N1.display(); return 0; }

2.设计并实现一个日期类Date,要求:

(1)可以建立具有指定日期(年、月、日)的Date对象,默认日期是2009.1.1。

(2)可以从输出流输出一个格式为“年-月-日”的日期,其中年是四位数据,月、日可以是一位也可以是两位数据。

(3)可以动态地设置年、月、日。

(4)可以用运算符= =、!=、<和>对两个日期进行比较。

(5)可以用运算符++、--、+=、-=等完成天数的加减一天或若干天的操作

(6)Date类必须能够正确表达日期,不会出现类似于13月,32日一类的情况。Date类还必须处理闰年的问题,闰年包括:所有能被400整除的年份,以及能被4整除同时又不能被100整除的年份。

(7)写出主函数对该类进行测试。

3.下面是一个数组类CArray的定义。要求: (1)在此基础上增加print()成员函数打印数组, (2)重载“=”、“+”、“-” 运算符使之能对该数组类对象进行赋值、加减运算。 (3)写出主函数对该类进行测试。 class CArray {private: int* p_arr; int size; public:

CArray(); //缺省构造函数

CArray(int* p_a,int s); //构造函数

CArray(const CArray &r_other);//复制构造函数

~CArray();//析构函数

int operator[](int pos) const; //访问数组元素值的下标运算符重载函数 int& operator[](int pos); //设置数组元素值的下标运算符重载函数 Carray &operator=(const Carray &other)//赋值运算符“=”重载函数 Carray &operator+(const Carray &other) //加运算符“=”重载函数 Carray &operator-(const Carray &other) //减运算符“=”重载函数 void print() const; };

CArray:: CArray() { p_arr=NULL; size=0;} CArray:: CArray(int* p_a,int s) {

if(s>0)

{ size=s; p_arr=new int[size];

for(int i=0;i

{ p_arr=NULL; size=0; } }

CArray::CArray(const CArray &r_other) { size=r_other.size; if(size)

{ p_arr=new int[size];

for(int i=0;i

CArray::~CArray()

{ if(p_arr) delete[] p_arr; p_arr=NULL; size=0; }

int CArray::operator[](int pos) const {

if(pos>=size) return p_arr[size-1]; if(pos<0) return p_arr[0]; return p_arr[pos]; }

int& CArray::operator[](int pos) {

if(pos>=size) return p_arr[size-1]; if(pos<0) return p_arr[0]; return p_arr[pos]; }

4.下面是一个自定义字符串类的声明。请写出该类所有成员函数的类外定义代码。 class string

{private:

unsigned buflen; char * buffer; public:

string();//构造函数 string(unsigned); string(char);

string(const char*);

string(const string &);//复制构造函数 ~string();//析构函数 //重载赋值运算符

string& operator=(const string &right); string& operator+=(const string &right); char *operator+=(const char *right);

friend string operator+(const string & left,const string & right); //字符串连接 string operator()(unsigned start,unsigned len); //取子串 unsigned length()const; //求字符串长度

char & operator[](unsigned index)const; //访问单个字符 int compare(const string &)const; //字符串比较

operator const char *()const; //到普通c字符串的转换

friend ostream & operator<<(ostream &,string &);//字符串的输出 };

实验八、模板(2学时) 一、实验目的

1.函数模板的定义与调用。

2.掌握类模板的声明与使用方法。

二、实验内容

1.设计一个函数模板,实现两数的交换,并用int、float、double、char类型的数据进行测试。

2.设计一个函数模板,实现从int、float、double、char类型的数组找出最大值元素。提示:可用类型参数传递数组、用非类型参数传递数组大小,为了找出char*类型数组中的最大值元素,需要对该类型进行重载或特化。 3.编写一个顺序表类模板。

4.建立两个int类型的向量vector,利用merge算法将其合并,然后用sort算法对合并后的向量进行排序,最后输出排序结果。

实验九、输入输出流(自学) 一、实验目的

1.深入理解C++的输入输出的含义与其实现方法。 2.掌握标准输入输出流的应用,包括格式输入输出。 3.掌握对文件的输入输出操作。

二、实验内容

1.阅读下面的程序,写出程序运行的结果。 (1)

#include #include using namespace std; int main(){ fstream out,in; out.open(\ out<<\ out<<\ out<<\ out.close(); char buffer[80]; in.open(\ while(!in.eof()) { in.getline(buffer,80); cout<

return 0; } (2)

#include #include #include using namespace std; class Worker{ private: int number ,age; char name[20]; double sal; public:


《C++程序设计》上机指导与补充习题(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017-2018学年人教版高中政治必修二[教学设计]:《2.3 民主管理

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: