设计一个图书类 Book,数据成员有书号(id)、书名(bookTitle)、价格(price)、出版社(publisher);有带4个参数的构造函数,有静态数据成员图书对象总价bookTotalPrice;有静态函数getBookTotalPrice返回当前图书对象的总价格; getMessage()成员函数返回图书信息。编写测试程序,在main函数中输入若干图书信息,构建若干图书类对象,并测试类中的所有函数。提示:在函数中可以使用ostringstream类实现构造所需字符串并返回字符串,例如: ostringstream oss; oss<<""书号: ""<<id<<"",书名: ""<<bookTitle<<"",价格: ""<<price<<"",出版社:""<<publisher, 返回消息; 字符串消息= oss.str (); + 0: ostringstream #include<sstream>
时间: 2023-07-19 18:04:57 浏览: 99
17类花朵数据集.rar
5星 · 资源好评率100%
以下是题目所要求的Book类的实现和相应的测试程序:
```cpp
#include <iostream>
#include <sstream>
using namespace std;
class Book {
private:
int id;
string bookTitle;
double price;
string publisher;
static double bookTotalPrice; // 静态数据成员,记录图书对象的总价
public:
Book(int id, string bookTitle, double price, string publisher) {
this->id = id;
this->bookTitle = bookTitle;
this->price = price;
this->publisher = publisher;
bookTotalPrice += price; // 每创建一个图书对象,就累加到总价中
}
static double getBookTotalPrice() {
return bookTotalPrice;
}
string getMessage() {
ostringstream oss;
oss << "书号: " << id << ", 书名: " << bookTitle << ", 价格: " << price << ", 出版社: " << publisher;
return oss.str();
}
};
double Book::bookTotalPrice = 0; // 初始化静态数据成员
int main() {
Book b1(1, "C++ Primer", 99.9, "人民邮电出版社");
cout << "图书信息:" << b1.getMessage() << endl;
cout << "当前图书总价:" << Book::getBookTotalPrice() << endl;
Book b2(2, "Java核心技术", 89.5, "机械工业出版社");
cout << "图书信息:" << b2.getMessage() << endl;
cout << "当前图书总价:" << Book::getBookTotalPrice() << endl;
return 0;
}
```
输出结果:
```
图书信息:书号: 1, 书名: C++ Primer, 价格: 99.9, 出版社: 人民邮电出版社
当前图书总价:99.9
图书信息:书号: 2, 书名: Java核心技术, 价格: 89.5, 出版社: 机械工业出版社
当前图书总价:189.4
```
在测试程序中,我们先创建了两个Book对象b1和b2,并分别输出它们的信息和当前所有图书对象的总价。注意到在创建每个对象时,我们都在构造函数中将价格累加到静态数据成员bookTotalPrice中,这样就可以方便地计算所有图书对象的总价了。getMessage函数则使用ostringstream类构造并返回包含所有数据成员的字符串消息。
阅读全文