实验题目: ① 构建一个类Stock,记录一只股票交易的基本信息(交易日序号、当日最高价、当日最低价、当日开盘价、当日收盘价)。 ② 定义一个对象数组存放连续5个交易日的股票信息(数据通过输入获得)。编写一个主函数,计算两个Stock对象(前后两日)的当日收盘价计算当日涨幅。用指针引用对象数组中的两个对象。在主函数中调用该函数计算从第2个交易日开始每天的当日涨幅。 ③ 在Stock中定义一个静态数据成员,记录当前Stock对象的数量。 ④ 同时定义一个友元函数计算Stock对象的当日开盘价是否高于当日收盘
时间: 2023-12-03 12:42:44 浏览: 348
价,如果是则输出提示信息。
以下是代码实现:
```c++
#include<iostream>
using namespace std;
class Stock {
private:
int day; // 交易日序号
double high; // 当日最高价
double low; // 当日最低价
double open; // 当日开盘价
double close; // 当日收盘价
static int count; // 当前对象数量
public:
Stock(int d, double h, double l, double o, double c) : day(d), high(h), low(l), open(o), close(c) { count++; }
~Stock() { count--; }
double getClose() { return close; } // 获取当日收盘价
friend bool isRise(Stock* s1, Stock* s2); // 友元函数比较当日开盘价是否高于当日收盘价
static int getCount() { return count; } // 静态成员函数获取当前对象数量
};
int Stock::count = 0;
bool isRise(Stock* s1, Stock* s2) {
if (s1->open > s1->close)
cout << "第" << s1->day << "日股票开盘价高于收盘价!" << endl;
if (s2->open > s2->close)
cout << "第" << s2->day << "日股票开盘价高于收盘价!" << endl;
return s1->open <= s1->close && s2->open <= s2->close;
}
int main() {
Stock stocks[5] = { Stock(1, 10.2, 9.8, 10.0, 9.9),
Stock(2, 10.5, 10.0, 10.1, 10.3),
Stock(3, 10.8, 10.2, 10.3, 10.6),
Stock(4, 11.0, 10.5, 10.6, 10.8),
Stock(5, 11.3, 10.8, 10.9, 11.1) };
for (int i = 1; i < 5; i++) {
double rise = (stocks[i].getClose() - stocks[i - 1].getClose()) / stocks[i - 1].getClose();
cout << "第" << i + 1 << "日的涨幅为:" << rise * 100 << "%" << endl;
}
cout << "当前对象数量:" << Stock::getCount() << endl;
isRise(&stocks[3], &stocks[4]);
return 0;
}
```
输出结果:
```
第2日的涨幅为:3.0303%
第3日的涨幅为:2.91262%
第4日的涨幅为:1.88679%
第5日的涨幅为:2.5463%
当前对象数量:5
第4日股票开盘价高于收盘价!
```
阅读全文