cout<<“ \n“[i==n-1] 用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
院 系:计 算 机 学 院 实验课程:计算机基础实验课程 实验项目:多态 指导老师:XXX 开课时间:XXXX~ XXXX年度第 2学期 专 业:XXXX 班 级:XXXX级 本X班 学 生:XXX 学 号:XXXXXXXX 一、实验目的与要求: 1.掌握运算符重载的基本方法。 2.掌握虚函数的定义及多态性的实现。 二、实验内容: (一)实验题目一: 编写有理数(即分数,包括整数类型的分子和分母)类,并进行运算符重载,编 写运算符"+"、 "-"、 "*"、 "/"的重载函数,在主函数的函数体内中实现使用运算符直接进行有理数对象的加、减 、乘、除运算。 1.程序清单: #include<iostream> using namespace std; class Rnumber { public: Rnumber(){a=0;b=0;} Rnumber(int,int); Rnumber operator +(Rnumber &); Rnumber operator -(Rnumber &); Rnumber operator *(Rnumber &); Rnumber operator /(Rnumber &); void display(); private: int a; int b; }; Rnumber::Rnumber(int x,int y):a(x),b(y){} Rnumber Rnumber::operator +(Rnumber & x) { int i; i=(a>x.a)?a:x.a; for(;i!=0;i++) { if(i%b==0 && i%x.b==0) break; } return Rnumber(i/b*a+i/x.b*x.a,i); } Rnumber Rnumber::operator -(Rnumber & x) { int i; i=(a>x.a)?a:x.a; for(;i!=0;i++) { if(i%b==0 && i%x.b==0) break; } return Rnumber(i/b*a-i/x.b*x.a,i); } Rnumber Rnumber::operator *(Rnumber & x) { return Rnumber(a*x.a,b*x.b); } Rnumber Rnumber::operator /(Rnumber & x) { return Rnumber(a*x.b,b*x.a); } void Rnumber::display() { int n; n=(a<b)?a:b; for(;n>1;n--) { if(a%n==0 && b%n==0) { a=a/n; b=b/n; } } cout<<a<<"/"<<b; } int main() { Rnumber a1(3,5),a2(3,4),a3,a4,a5,a6; a3=a1+a2; a4=a1-a2; a5=a1*a2; a6=a1/a2; cout<<"a1="; a1.display(); cout<<" a2="; a2.display(); cout<<endl; cout<<"a1+a2="; a3.display(); cout<<endl; cout<<"a1-a2="; a4.display(); cout<<endl; cout<<"a1*a2="; a5.display(); cout<<endl; cout<<"a1/a2="; a6.display(); cout<<endl; return 0; } 2. 程序运行结果: (二)实验题目二: BaseRun类定义如下: class BaseRun { public: void Run(){cout<<〝\n…………class BaseRun::Run()……\n〞;} }; 定义DogRun,CarRun和PeopleRun类,都继承自BaseRun类,并重载Run()函数,使各 类中的Run()函数分别输出不同的内容。 1.程序清单: #include<iostream> using namespace std; class BaseRun { public: void Run() { cout<<"\n……class BaseRun::Run()……\n"; } }; class DogRun:public BaseRun { public: void Run() { cout<<"\n……class DogRun::Run()……\n"; } }; class CarRun:public BaseRun { public: void Run() { cout<<"\n……class CarRun::Run
#include <iostream> #include <cstring> using namespace std; class Book { public: string title; string author; string publisher; string date; Book(string t, string a,string p,string d) { title=t; author=a; publisher=p; date=d; } ~Book(){} }; class Library { public: Book book[100]; int n; Library(){n=0;} void AddBook(Bookb) { book[n++]=b; } void DeleteBook(string t) { for (int i=0;i<n;i++) { if(book[i]->title==t) { delete book[i]; book[i]=NULL; for(int j=i;j<n-1;j++) { book[j]=book[j+1]; } n--; } } cout<<"未找到题目为"<<t<<"的书籍"<<endl; } void ShowBook() { cout<<"书籍显示"<<endl; for(int i=0;i<n;i++) { cout<<book[i]->title<<" "<<book[i]->author<<" "<<book[i]->publisher<<" "<<book[i]->date<<endl; } } BookFindBook(string t) { for (int i=0;i<n;i++) { if(book[i]->title==t) { return book[i]; } } cout<<"未找到题目为"<<t<<"的书籍"<<endl; return NULL; } ~Library() { for(int i=0;i<n;i++) { delete book[i]; } } }; int main() { Library l; int input; string t,a,p,d; cout << "------------------菜单栏------------------" << endl; cout << "1.图书信息添加" << endl; cout << "2.图书信息删除" << endl; cout << "3.图书信息查看" << endl; cout << "4.图书信息查找" << endl; cout << "0.退出" << endl; while(1) { cout << "请选择功能" << endl; cin >> input; switch (input) { case 1: { cout<<"请输入添加的图书书名:"; cin>>t; cout<<"请输入添加的图书作者:"; cin>>a; cout<<"请输入添加的图书出版社:"; cin>>p; cout<<"请输入添加的图书出版日期:"; cin>>d; Bookb=new Book(t,a,p,d); l.AddBook(b); break; } case 2: { cout<<"请输入删除的图书书名:"; cin>>t; l.DeleteBook(t); break; } case 3: { l.ShowBook(); break; } case 4: { cout<<"请输入查找的图书书名:"; cin>>t; Book *b=l.FindBook(t); if(b!=NULL) { cout<<"查询结果为:"<<b->title<<" "<<b->author<<" "<<b->publisher<<" "<<b->date<<endl; } break; } case 0: { cout<<"已退出"<<endl; return 0; } } } }优化这段程序
05-24
这段程序可以进行如下的优化: 1. 对输入进行错误处理,避免输入非法字符导致程序崩溃。 2. 在 Library 类中添加一个私有成员变量 max_len,表示 book 数组的最大长度,避免数组越界的错误。 3. 在 AddBook 方法中,当 book 数组已满时需要进行扩容。 4. 在 DeleteBook 和 FindBook 方法中,可以使用引用来避免对对象进行拷贝,提高程序效率。 5. 修改 ShowBook 方法的输出格式,让输出更加美观。 下面是修改后的程序: ```cpp #include <iostream> #include <cstring> using namespace std; class Book { public: string title; string author; string publisher; string date; Book(string t, string a, string p, string d) { title = t; author = a; publisher = p; date = d; } ~Book() {} }; class Library { private: Book* book; int n; int max_len; public: Library() { n = 0; max_len = 100; book = new Book[max_len]; } void AddBook(Book& b) { if (n >= max_len) { max_len *= 2; Book* new_book = new Book[max_len]; memcpy(new_book, book, n * sizeof(Book)); delete[] book; book = new_book; } book[n++] = b; } void DeleteBook(string t) { for (int i = 0; i < n; i++) { if (book[i].title == t) { for (int j = i; j < n - 1; j++) { book[j] = book[j + 1]; } n--; return; } } cout << "未找到题目为 " << t << " 的书籍" << endl; } void ShowBook() { cout << "------------------书籍显示------------------" << endl; cout << "书名\t\t作者\t\t出版社\t\t出版日期" << endl; for (int i = 0; i < n; i++) { cout << book[i].title << "\t\t" << book[i].author << "\t\t" << book[i].publisher << "\t\t" << book[i].date << endl; } } Book& FindBook(string t) { for (int i = 0; i < n; i++) { if (book[i].title == t) { return book[i]; } } cout << "未找到题目为 " << t << " 的书籍" << endl; static Book null_book("", "", "", ""); return null_book; } ~Library() { if (book) { delete[] book; } } }; int main() { Library l; int input; string t, a, p, d; cout << "------------------菜单栏------------------" << endl; cout << "1.图书信息添加" << endl; cout << "2.图书信息删除" << endl; cout << "3.图书信息查看" << endl; cout << "4.图书信息查找" << endl; cout << "0.退出" << endl; while (1) { cout << "请选择功能: "; cin >> input; switch (input) { case 1: { cout << "请输入添加的图书书名:"; cin >> t; cout << "请输入添加的图书作者:"; cin >> a; cout << "请输入添加的图书出版社:"; cin >> p; cout << "请输入添加的图书出版日期:"; cin >> d; Book b(t, a, p, d); l.AddBook(b); break; } case 2: { cout << "请输入删除的图书书名:"; cin >> t; l.DeleteBook(t); break; } case 3: { l.ShowBook(); break; } case 4: { cout << "请输入查找的图书书名:"; cin >> t; Book& b = l.FindBook(t); if (b.title != "") { cout << "查询结果为:" << b.title << "\t\t" << b.author << "\t\t" << b.publisher << "\t\t" << b.date << endl; } break; } case 0: { cout << "已退出" << endl; return 0; } default: { cout << "输入错误,请重新选择功能" << endl; break; } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值