编程中途不要中断#include <iostream> #include <string> using namespace std; // 基类 Book class Book { public: // 构造函数 Book(string title, string author, int pages) : title(title), author(author), pages(pages) {} // 析构函数 ~Book() {} // 复制构造函数 Book(const Book& other) : title(other.title), author(other.author), pages(other.pages) {} // 友元函数,用于输出书籍信息 friend ostream& operator<<(ostream& os, const Book& b); // 静态函数,用于统计图书总数 static int getTotalBooks() { return totalBooks; } // 虚函数,用于多态输出 virtual void print() const; protected: string title; string author; int pages; static int totalBooks; // 静态数据成员,用于统计图书总数 }; int Book::totalBooks = 0; ostream& operator<<(ostream& os, const Book& b) { os << "书名:" << b.title << endl << "作者:" << b.author << endl << "页数:" << b.pages << endl; return os; } void Book::print() const { cout << *this << endl; } // 派生类 EBook,通过继承获得基类的所有成员 class EBook : public Book { public: // 构造函数 EBook(string title, string author, int pages, string format) : Book(title, author, pages), format(format) {} // 析构函数 ~EBook() {} // 复制构造函数 EBook(const EBook& other) : Book(other), format(other.format) {} // 重载输出运算符,用于输出电子书信息 friend ostream& operator<<(ostream& os, const EBook& eb); // 重写
时间: 2023-02-05 12:12:11 浏览: 98
好的,我会用中文回答你的问题。在编程中,中断通常指的是程序在运行过程中意外停止,这可能是由于程序出现了错误或者遇到了无法处理的异常情况。如果你想防止程序在中途中断,你可以尝试捕获异常,并在程序中处理这些异常,使程序能够继续运行下去。
相关问题
根据自身对面向对象方法与系统设计的理解,参照《重构-改善既有代码的设计》书中关于不良设计(违反SOLID)、不良代码(代码坏味道bad smells)的判别标准,分点讨论现有代码中的问题。#pragma once #include<iostream> #include<xstring> #include"student.h" using namespace std; class book { public: void setbooks(string name, string isbn, string information, int page, int price, int ben); void setbook();//输入书的信息 void setname();//输入名字 string getname();//返回书名 void setisbn();//输入isbn码 string getisbn();//返回isbn码 void setinformation();//输入图书信息 string getinformation();//返回图书信息 void setpage();//输入图书页数 int getpage();//返回图书页数 void setprice();//输入图书价格 int getprice();//返回图书价格 void setben();//输入书的数量 int getben();//返回书的数量 void reduceben();//书的数量减少 void plusben();//书的数量增加 void showbook();//显示书的各种信息 bool judge(string isbn1);//判断ISBN合法性 ~book(); private: string name, isbn, information; int price, page, ben; };
现有代码中存在以下问题:
1. SRP(单一职责原则):book类承担了太多的职责,包括输入书的信息、展示书的各种信息、判断ISBN合法性等,违反了单一职责原则。
2. OCP(开放封闭原则):代码中没有考虑到未来需求的变化,如增加新的书籍类型或者增加不同的书籍属性,代码需要重新修改,违反了开放封闭原则。
3. LSP(里氏替换原则):代码中没有使用继承或多态等方式来统一管理不同类型的书籍,导致代码的扩展性和可维护性较差,违反了里氏替换原则。
4. DIP(依赖倒置原则):代码中依赖具体实现而非抽象,如使用了具体的string类型而非抽象的接口或基类,导致代码的耦合性较高,违反了依赖倒置原则。
5. 代码坏味道(bad smells):代码中存在重复代码、命名不规范、代码冗余等问题,需要进行重构来提高代码质量。
首先,创建一个基类 Book,包含书的基本信息,如书名、作者、出版社等。这个类可以包含构造函数、析构函数、复制构造函数等成员函数。为了实现多态输出,可以在这个类中编写一个虚函数 print(),用于输出图书的信息。 然后,可以创建一个派生类 EBook,继承自 Book 类,并增加一些新的成员变量,如电子书的文件格式等。这个类中也可以包含构造函数、析构函数等成员函数。 在主函数中,可以创建一个指向 Book 类的指针数组,然后动态地创建 Book 类的对象和 EBook 类的对象,将这些对象存储到指针数组中。然后,可以通过循环来调用每个对象的 print() 函数,实现多态输出。 另外,可以编写一个静态函数 menu(),用于输出操作菜单,让用户选择要进行的操作,例如添加图书、删除图书等。用c++直接开始编程,不要中断
好的,我来为你编写一个例子。请注意,这仅是一个示例,你可能需要根据你自己的需求进行更改。
```
#include <iostream>
#include <string>
using namespace std;
// 基类 Book
class Book
{
public:
// 构造函数
Book(string name, string author, string publisher)
: m_name(name), m_author(author), m_publisher(publisher)
{
}
// 析构函数
virtual ~Book()
{
}
// 复制构造函数
Book(const Book &other)
: m_name(other.m_name), m_author(other.m_author), m_publisher(other.m_publisher)
{
}
// 虚函数 print()
virtual void print()
{
cout << "书名: " << m_name << endl;
cout << "作者: " << m_author << endl;
cout << "出版社: " << m_publisher << endl;
}
private:
string m_name; // 书名
string m_author; // 作者
string m_publisher; // 出版社
};
// 派生类 EBook,继承自基类 Book
class EBook : public Book
{
public:
// 构造函数
EBook(string name, string author, string publisher, string format)
: Book(name, author, publisher), m_format(format)
{
}
// 析构函数
virtual ~EBook()
{
}
// 复制构造函数
EBook(const EBook &other)
: Book(other), m_format(other.m_format)
{
}
// 虚函数 print()
void print()
{
Book::print(); // 调用基类的 print() 函数
cout << "文件格式: " << m_format << endl;
}
private:
string m_format; // 电子书的文件格式
};
// 静态函数 menu()
static void menu()
{
cout << "1. 添加图书" << endl;
cout << "2. 删除图书" << endl;
cout << "3. 输出所有图书
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)