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_valueset_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”)。

使用一个新类型时,最关键的是了解成员函数的功能,而不必考虑其实现细节。

C++ —— 类的使用相关推荐

  1. 自己搜集编写的Delphi 通用函数

    { ********************************************************************** } { Currency Common Functio ...

  2. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  3. MybatisPlus忽略实体类中的非数据库字段、JPA忽略实体类中的非数据库字段、HeHibernate忽略实体类中的非数据库字段

    mybatis plus忽略映射字段时可以在实体类属性上使用以下注解: @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的. @TableField(e ...

  4. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...

    使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...

  5. IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成

    在新建类文件的时候自动生成注解,诸如我们常见的那些 作者,创建时间,TODO 等等 将以下格式的代码放在Settings -> File and Code Templates -> Inc ...

  6. javabean实体类与实体类之间的快速转换

    一.Dozer是什么? dozer是一个能把实体和实体之间进行转换的工具.只要建立好映射关系.就像是ORM的数据库和实体映射一样. 使用方法示例如下: // article(PO) -> art ...

  7. 利用dom4j将实体类转换为对应的xml报文

    利用dom4j生成xml报文 目标格式: <?xml version="1.0" encoding="GBK"?><Packet type=& ...

  8. Idea groovy表生成实体类带注释

    Idea groovy表生成实体类带注释 1.点开datasourse,打开idea带的数据库工具,具体添加数据库连接,这里不描述. 这时点击会生成一个poji 这时生成的pojo中是不带中文注释的, ...

  9. java带参数的方法笔记_具有Java参数的方法的类声明

    类声明可以包含在Java中具有参数的方法.演示此过程的程序如下: 示例class Message { public void messagePrint(String msg) { System.out ...

  10. Python 闭包、单个装饰器、多个装饰器、装饰器修饰类、应用场景

    1. 闭包 在 Python 中,函数也可以作为参数.我们可以执行下面的代码: def func(a, b):return a + bprint(func) 我们直接输出函数名,而没有加括号.输出结果 ...

最新文章

  1. python使用正则表达式寻找具有特定后缀的文件
  2. flex3通过fluorinefx跟asp.net进行数据交互
  3. 【sprinb-boot】maven 多模块项目:单独 spring-boot:run 某个模块
  4. libevent源码学习-----时间管理
  5. CACTI 0.87e 安装
  6. ASP.NET N问N答 (一) ASP.NET怎么导出到WORD?(把girdview里面的数据到出到word)
  7. springBoot 解决前后端分离项目中跨越请求,同源策略
  8. CVPR 2019 | 国防科大提出双目超分辨算法,效果优异代码已开源
  9. 自主云服务器处理器_统信服务器操作系统 V20 欧拉版发布
  10. mpvue中小程序自定义导航组件开发指南
  11. 怎么在服务器上运行sql文件,数据库执行sql文件
  12. office每次退出时,提示更改会影响共用模板normal
  13. Unity Container 应用示例
  14. as it exceeds the max of 500KB._It#39;s a date的一语双关:它不仅仅表示“约会”
  15. Java freemarker 生成word文档
  16. 人工神经网络的硬件实现,人工神经网络基本概念
  17. WPF中UserControl 绑定样式(小白教程)
  18. Linq语句集成查询
  19. mysql中字段约束unique_什么是MySQL UNIQUE约束,我们如何将其应用于表的字段?
  20. 孔子最得意的弟子颜回不幸英年早逝

热门文章

  1. 某音直播协议实现技术探讨
  2. 养车记账本小程序开发教程
  3. Android JNI 中文字符传递
  4. Oracle数据库迁移到人大金仓KingBase数据库
  5. CMD权限不够怎么办
  6. python情人节之玫瑰花与表白方式
  7. c语言中符号是什么作用是什么,c语言中的符号|=是什么意思?
  8. python摄像头动作捕捉_OpenMMD:没有专业摄像设备也能动作捕捉!K帧动作设计苦手的福音~...
  9. SRS 对接GB28181 token防盗链配置
  10. 【调剂】华北电力大学(保定)2022年硕士研究生部分专业接收调剂公告