Stock 类声明代码
知道如何创建类声明以及实现类的成员函数之后,这里以股票为例,创建了一个 Stock 类的声明,以及实现 Stock 声明中的成员函数。
// Stock 类声明
// source/2.1/stock00.h
#ifndef STOCK00_H_
#define STOCK00_H_
#include <iostream>
class Stock {
private:
std::string company; // 公司
long shares; // 持有的股数
double share_value; // 股票实时单价
double total_value; // 持有的股票总价
// 设置 total_value 的值
// void set_tot() {
// total_value = shares * share_value;
// } // 内联函数
void set_tot();
public:
/**
* 股票初始化
*/
void acquire(const std::string& co, long n, double pr);
/**
* 购买股票
*/
void buy(long num, double price);
/**
* 出售股票
*/
void sell(long num, double price);
/**
* 更新股票价格
*/
void update(double price);
/**
* 展示股票信息
*/
void show();
}; // 注意类声明以分号结尾
inline void Stock::set_tot() {
total_value = shares * share_value;
}
#endif // STOCK00_H_
// Stock 成员函数的实现
#include "stock0.h"
void Stock::acquire(const std::string &co, long n, double pr) {
company = co;
if (n < 0) {
std::cout << "购买股票的数目无效," << company << " 公司股票数目设置为 0.\n";
shares = 0;
}
else {
shares = n;
}
share_value = pr;
// 更新 total_value
set_tot();
}
void Stock::buy(long num, double price) {
if (num < 0) {
std::cout << "购买 " << company << " 公司股票数目异常,购买无效\n";
return;
}
shares += num;
share_value = price;
set_tot();
}
void Stock::sell(long num, double price) {
if (num < 0) {
std::cout << "出售 " << company << " 公司股票数目异常,出售无效\n";
} else if (num > shares) {
std::cout << "出售数目多于持有数目\n";
} else {
shares -= num;
share_value = price;
set_tot();
}
}
void Stock::update(double price) {
share_value = price;
set_tot();
}
void Stock::show() {
std::cout << "Company: " << company << std::endl
<< "Shares: " << shares << std::endl
<< "Share Price: $" << share_value << std::endl
<< "Total Worth: $" << total_value <<std::endl;
}
Stock 类的使用代码
知道如何定义类及其方法之后,我们将用上面声明的 Stock 类来学习下对象的创建与使用。
C++ 的目标是使得类与使用基本的内置类型(如 int、char) 尽可能的相同:
- 创建类的对象。可以声明类的变量;也可以使用 new 为类的对象分配存储空间,并返回一个地址赋值给对应的指针。
- 对象可以作为函数的参数、返回值。
- 可以将一个对象直接赋值给另一个对象。对于需要深拷贝的类,可以通过重载赋值运算符以及复制构造函数的方式完成。由于深拷贝涉及到类成员动态内存分配,这里暂时不做讲解。
- C++ 提供了一些工具用于初始化对象、让 cin、cout 识别对象,甚至可以在相似的类对象之间进行类型转换。
虽然要做到这些工作还需要学习一些内容,但是目前已知的类相关的知识已经足以让我们创建一个简单的程序了。
#include "stock0.h"
int main(void) {
// 声明 Stock 变量
Stock sally;
// 首次购买 Coke 股票
sally.acquire("Coke", 3, 10.4);
sally.show();
sally.buy(-1, 5);
sally.buy(3, 6);
sally.show();
sally.sell(-1, 3);
sally.sell(3, 7);
sally.show();
sally.sell(7, 9);
sally.show();
}
// 程序的输出
Company: Coke
Shares: 3
Share Price: $10.4
Total Worth: $31.2
购买 Coke 公司股票数目异常,购买无效
Company: Coke
Shares: 6
Share Price: $6
Total Worth: $36
出售 Coke 公司股票数目异常,出售无效
Company: Coke
Shares: 3
Share Price: $7
Total Worth: $21
出售数目多于持有数目
Company: Coke
Shares: 3
Share Price: $7
Total Worth: $21
main() 只是用来测试 Stock 类的设计。当 Stock 类的运行情况与预期的相同后,便可以在其他程序中将 Stock类作为用户自定义的类型来使用 (只需要在使用 Stock 类的 cpp 文件中加上 #include “stock0.h”)。
使用一个新类型时,最关键的是了解成员函数的功能,而不必考虑其实现细节。