当前位置: 首页 > news >正文

《C++PrimePlus》第10章 对象和类

10.1 过程性编程和面向对象编程

10.2 抽象和类

10.3 类的构造函数和析构函数

类的定义和使用(买卖股票)

头文件stock10.h

#ifndef  __STOCK00__H__
#define __STOCK00__H__#include <string>class Stock {
// pravate的内容只能通过public访问
private:std::string company; // 公司名字long shares; // 股票的数量double share_val; // 每只股票的价格double total_val; // 股票总价值void set_total() {total_val = shares * share_val;}; // 函数在类的声明中定义,将自动成为内联函数public:// 默认构造函数Stock();// 构造函数Stock(const std::string &co, long n = 0, double pr = 0.0);// 析构函数~Stock();// 买入股票:买入数量,买入价格void buy(long num, double price);// 卖出股票:卖出数量,卖出价格void sell(long num, double price);// 传递最新价格void update(double price);// 显示股票信息void show() const;
}; #endif // ! __STOCK00_H__

源代码usestock2.cpp

#include <iostream>
#include "stock10.h"int main() {using std::cout;cout << "Using constructors to create new objects\n";Stock stock1("NanoSmart", 12, 20.0); // 隐式调用stock1.show();Stock stock2 = Stock("Boffo Objects", 2, 2.0); // 显式调用stock2.show();cout << "Assigning stock1 to stock2:\n";stock2 = stock1; // 类的对象可以相互之间对拷cout << "Listing stock1 and stock2:\n";stock1.show();stock2.show();cout << "Using a constuctor to reset an Object\n";stock1 = Stock("Nifty Foods", 10, 50.0); // 创建临时变量再赋值cout << "Revised stock1:\n";stock1.show();cout << "Done\n";const Stock land = Stock{ "Klu Pro" };// show()函数要接收const的对象,函数定义时要在函数名后面加上constland.show();return 0;
}

源代码stock10.cpp

#include <iostream>
#include "stock10.h"Stock::Stock() {std::cout << "Default constructor called\n";company = "no name";shares = 0;share_val = 0.0;total_val = 0.0;
}Stock::Stock(const std::string &co, long n, double pr) {company = co;if (n < 0) {std::cout << "Number can't be negative, shares set to 0" << std::endl;shares = 0;}else shares = n;share_val = pr;set_total();
}Stock::~Stock() {std::cout << "Bye, " << company << "!\n";
}void Stock::buy(long num, double price) {if (num < 0) {std::cout << "Number can't be negative, transatcion failed." << std::endl;}else {shares += num;share_val = price;set_total();}
}void Stock::sell(long num, double price){if (num < 0) {std::cout << "Number can't be negative, transatcion failed." << std::endl;}else if (num > shares){std::cout << "Number is more than you have, transaction failed." << std::endl;}else {shares -= num;share_val = price;set_total();}
}void Stock::update(double price) {share_val = price;set_total();
}void Stock::show() const{ // 代表函数不会修改值,可以接收const的对象std::cout << "Company: " << company << std::endl;std::cout << "Shares: " << shares << std::endl;std::cout << "Share price: " << share_val << std::endl;std::cout << "Total worth: " << total_val << std::endl;
}

10.4 This指针

This指针的使用(比较股票总值)

// 比较股票的总金额,并返回一个对象
// 第2个const:函数不会修改被显式访问的对象
// 第3个const:函数不会修改被隐式访问的对象
// 第1个const:函数会返回一个const Stock对象
const Stock & Stock::topval(const Stock & s) const{if (s.total_val > total_val) // total_val == this->total_valreturn s;elsereturn *this; // this是一个指针,要返回值需要取值运算符
}

10.5 对象数组

使用对象数组(找出总价值最大的股票)

int main(){Stock stocks[4] = {Stock("NanoSmart", 12, 20.0),Stock("Boffo Objects", 200, 2.0),Stock("Monolithic Obelisks", 130, 3.25),Stock("Fleep Enterprises", 60, 6.5)};std::cout << "Stock holdings:\n";int st;for (st = 0; st < 4; st++)stocks[st].show();const Stock * top = &stocks[0];for (st = 1; st < 4; st++)// 使用指针的方法返回一个对象,然后再取地址赋给toptop = &top->topval(stocks[st]);std::cout << "\nMost valuable holding:\n";top->show();return 0;
}

10.6 类作用域

10.7 抽象数据类型

使用类实现抽象数据类型(栈)

头文件stack.h

#ifndef  __STACK__H__
#define __STACK__H__typedef unsigned long Item; // 类型别名,如果需要放别的类型就改这里class Stack {private:enum {MAX = 10}; // 创建枚举类型,遇到MAX就替换成10Item items[MAX];int top; // 栈顶的指针public:Stack();bool isempty() const; // 栈是否为空bool isfull() const; // 栈是否满了bool push(Item &item); // 入栈,成功返回1,失败返回0bool pop(Item &item); // 出栈,成功返回1,失败返回0
}; #endif

源文件stacker.cpp

#include <iostream>
#include "stack.h"
using namespace std;int main() {char ch;unsigned long po;Stack st;cout << "Enter 'A' to push to stack\n";cout << "Enter 'P' to pop from stack\n";cout << "Enter 'Q' to quit\n";while (cin >> ch && ch != 'Q') {while (cin.get() != '\n') // 删除输入行中剩余部分continue;switch (ch) {case 'A':cout << "Enter a number:" << endl;cin >> po;if (st.isfull())cout << "Stack already full." << endl;elsest.push(po);break;case 'P':if (st.isempty())cout << "Stack is empty." << endl;else {st.pop(po);cout << po << " is poped." << endl;}break;}cout << "Enter 'A' to push to stack\n";cout << "Enter 'P' to pop from stack\n";cout << "Enter 'Q' to quit\n";}return 0;
}

源文件stack.cpp

#include "stack.h"Stack::Stack() {top = 0;
}bool Stack::isempty() const {return top == 0;
}bool Stack::isfull() const {return top == MAX;
}bool Stack::push(Item &item){if (top < MAX) {items[top++] = item; // 先操作,后加加return true;}elsereturn false;
}bool Stack::pop(Item &item) {if (top > 0) {item = items[--top]; // 先减减,再操作return true;}elsereturn false;
}

相关文章:

《C++PrimePlus》第10章 对象和类

10.1 过程性编程和面向对象编程 10.2 抽象和类 10.3 类的构造函数和析构函数 类的定义和使用&#xff08;买卖股票&#xff09; 头文件stock10.h #ifndef __STOCK00__H__ #define __STOCK00__H__#include <string>class Stock { // pravate的内容只能通过public访问 p…...

实现极坐标图表QPolarChart的角度轴范围是[0,360]时,0度在水平右侧

目录 参考角度轴范围是[0,360]时&#xff0c;0度在水平右侧.h.cpp 参考 Qt数据可视化(QPolarChart雷达图) 默认QPolarChart的范围是[0,360]时&#xff0c;0度在垂直上方 如官方例子QValueAxis角度轴范围是[-100,100] 角度轴范围是[0,360]时&#xff0c;0度在水平右侧 原理&am…...

讲述 什么是鸿蒙 为什么需要鸿蒙 为什么要学习鸿蒙

首先 我们为什么要学习鸿蒙开发&#xff1f; 因为 鸿蒙发展前景巨大 鸿蒙自发布依赖 一直受社会各界关注 强两百的 App厂商 大部分接受了与鸿蒙的合作 硬件也有非常多与鸿蒙合作的厂商 鸿蒙的合作企业基本已经覆盖整个互联网客户的主流需求 所以鸿蒙的崛起不过是早晚的问题 …...

【深度学习笔记】05 线性回归

线性回归 线性回归基于几个简单的假设&#xff1a; 首先&#xff0c;假设自变量 x \mathbf{x} x和因变量 y y y之间的关系是线性的&#xff0c; 即 y y y可以表示为 x \mathbf{x} x中元素的加权和&#xff0c;这里通常允许包含观测值的一些噪声&#xff1b; 其次&#xff0c;我…...

二叉树算法—后继节点

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 1 后继节点1.1 解题思路1.2 代码实现 &#x1f48e;总结 1 后继节点 1.1 解题思路 二叉树节点结构定义如下&#xff1a; public static class Node { public int cal; public Node left; public Node right; public…...

C语言做一个恶作剧关机程序

一、项目介绍 C语言实现一个简单的"流氓软件"&#xff0c;一个可以强制关机恶作剧关机程序&#xff0c;输入指定指令可以解除 二、运行截图 然后当你输入“n”才可以解锁关机。 三、完整源码 #include <stdlib.h> #include <stdio.h> #include <s…...

数据结构 / 计算机内存分配

1. Linux 32位系统内存分配 栈(stack): 先进后出, 栈区变量先定义的后分配内存, 栈区地址从高到低分配堆(heap): 先进先出, 栈区变量先定义的先分配内存, 堆区地址从低到高分配堆栈溢出: 表示的是栈区内存耗尽, 称为溢出. 例如: 每次调用递归都需要在栈区申请内存, 如果递归太深…...

计算机视觉算法——基于Transformer的目标检测(DN DETR / DINO / Sparser DETR / Lite DETR)

计算机视觉算法——基于Transformer的目标检测&#xff08;DN DETR / DINO&#xff09; 计算机视觉算法——基于Transformer的目标检测&#xff08;DN DETR / DINO&#xff09;1. DN DETR1.1 Stablize Hungarian Matching1.2 Denoising1.3 Attention Mask 2. DINO2.1 Contrasti…...

Spark---基于Yarn模式提交任务

Yarn模式两种提交任务方式 一、yarn-client提交任务方式 1、提交命令 ./spark-submit --master yarn --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100 或者 ./spark-submit --master yarn–client --class org.apache.s…...

SpringCloud之Gateway(统一网关)

文章目录 前言一、搭建网关服务1、导入依赖2、在application.yml中写配置 二、路由断言工厂Route Predicate Factory三、路由过滤器 GatewayFilter案例1给所有进入userservice的请求添加一个请求头总结 四、全局过滤器 GlobalFilter定义全局过滤器&#xff0c;拦截并判断用户身…...

案例029:基于微信小程序的阅读网站设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…...

27. Spring源码篇之SpEL表达式之自定义解析模版

简介 其实前面文章我们已经介绍过了如何定义spring表达式的解析模版&#xff0c;但是那是直接使用表达式api的形式&#xff0c;对于使用spring的同学来说&#xff0c;更优雅的方式就是可以自定义一个扩展去修改 本文就是介绍如何通过Spring的扩展点修改表达式解析模版 自定义…...

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

文章目录 专栏导读一、地图应用场景二、参数说明1. 导包2. add函数 三、地图绘制实战1. 省市地图2. 中国地图3. 中国地图&#xff08;带城市&#xff09;4. 中国地图&#xff08;分段型&#xff09;5. 中国地图&#xff08;连续型&#xff09;6. 世界地图7. 行程轨迹地图8. 人口…...

bugku 渗透测试

场景1 查看源代码 场景2 用dirsearch扫描一下看看 ok看到登录的照应了第一个提示 进去看看 不出所料 随便试试admin/admin进去了 在基本设置里面看到falg 场景3 确实是没啥想法了 找到php在线运行 检查网络&#xff0c;我们发现这个php在线运行会写入文件 那我们是不是写…...

WordPress用sql命令批量删除所有文章

有时我们需要将一个网站搬迁到另一个服务器。我们只想保留网站的模板样式&#xff0c;而不需要文章内容。一般情况下我们可以在后台删除已发表的文章&#xff0c;但如果有很多文章&#xff0c;我们则需要一次删除所有文章。 WordPress如何批量删除所有文章 进入网站空间后台&a…...

树状数组 / pbds解法 E2. Array Optimization by Deque

Problem - 1579E2 - Codeforces Array Optimization by Deque - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 树状数组解法 将 a i a_i ai​插入到队头&#xff0c;贡献为&#xff1a;原队列中所有比 a i a_i ai​小的数的数量将 a i a_i ai​插入到队尾&#xff0c;贡献为&a…...

原神「神铸赋形」活动祈愿现已开启

亲爱的旅行者&#xff0c;「神铸赋形」活动祈愿现已开启&#xff0c;「单手剑静水流涌之辉」「法器碧落之珑」概率UP&#xff01; 活动期间&#xff0c;旅行者可以在「神铸赋形」活动祈愿中获得更多武器与角色&#xff0c;提升队伍的战斗力&#xff01; 〓祈愿时间〓 4.2版本更…...

php使用Session实现简单购物车功能

一个简单的商城购物车功能。它使用了PHP的会话(Session)来存储购物车数据&#xff0c;通过调用不同的函数来实现添加商品、移除商品、更新商品数量以及清空购物车的功能 session_start();// 初始化购物车 if (!isset($_SESSION[cart])) {$_SESSION[cart] array(); }// 添加商品…...

【JavaScript】alert的使用方法 | 超详细

alert作用效果 alert&#xff08;&#xff09;方法用于显示带有一条指定消息和一个确认的按钮的警告框。 alert使用方法 方法一&#xff1a;直接写在script标签内 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...

总结Vue3里一些常见的组合式api

一&#xff1a;前言 二&#xff1a;常见api 1、ref 和 reactive 这两个组合式 api 是在 Vue3 开发中最为常见的两个 api &#xff0c;主要是将一个非响应式的数据变为响应式数据。 ref作用: 定义一个数据的响应式 语法: const xxx ref(initValue):创建一个包含响应式数据的引…...

Visio中高效导出无白边SVG矢量图的完整指南

1. 为什么需要无白边SVG矢量图&#xff1f; 写论文或者做演示文稿时&#xff0c;经常需要在文档中插入各种图表。Visio作为一款专业的绘图工具&#xff0c;能够帮助我们快速创建流程图、架构图等专业图形。但直接将Visio图形导出为SVG格式时&#xff0c;往往会发现图片周围有大…...

IDA Pro 9.3 更新- 强大的反汇编程序、反编译器和多功能调试器工具

简介 IDA Pro 9.3 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器 A powerful disassembler, decompiler and a versatile debugger. In one tool.IDA Pro 一个强大的反汇编程序、反编译器和多功能调试器。集成在一个工具中。 请访问原文链接&#x…...

电子书怎么转TXT?这4个电子书转TXT工具亲测有效,小白也能秒会!

随着数字阅读的普及&#xff0c;EPUB格式电子书因排版精美深受用户喜爱&#xff0c;但在编辑、手机阅读或跨设备分享时&#xff0c;TXT格式的兼容性和灵活性更具优势。本文针对不同使用场景&#xff0c;整理了4种亲测有效的EPUB转TXT方法&#xff0c;每个方法均拆解详细步骤&am…...

EMQX 5.8.8 多机集群部署避坑指南:为什么你的Docker容器总连不上?

EMQX 5.8.8 多机集群部署避坑指南&#xff1a;为什么你的Docker容器总连不上&#xff1f; 当你第一次尝试在Docker中部署EMQX多机集群时&#xff0c;可能会遇到各种令人抓狂的问题&#xff1a;节点无法通信、集群状态异常、Dashboard无法访问...这些问题往往源于对Erlang分布式…...

【信奥业余科普】02:给机器注入灵魂的两位天才——图灵与冯·诺依曼

第二篇信奥基础知识科普&#xff1a;了解“计算机科学之父”图灵与“现代计算机之父”冯诺依曼的伟大构想&#xff0c;以及现代计算机体系结构的基础奠定。 计算机硬件 写在前面的话&#xff1a;这是一系列专为对信奥&#xff08;信息学奥赛&#xff09;感兴趣的中小学生及家…...

算法动画图解:让复杂逻辑“活”起来的可视化秘籍

还在为算法和数据结构的抽象逻辑感到头疼吗&#xff1f;静态的图文讲解难以形成深刻理解&#xff0c;自己写代码调试又耗时费力。 想让复杂的算法过程真正“活”起来、一目了然&#xff1f;推荐你试试**图码这个宝藏工具。它提供了超过60种数据结构和算法的交互式动画可视化**…...

告别Office!8个理由让你立即尝试这款在线PPT制作工具

告别Office&#xff01;8个理由让你立即尝试这款在线PPT制作工具 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for…...

JavaScript前端调用Ostrakon-VL-8B:实现浏览器内图片实时分析插件

JavaScript前端调用Ostrakon-VL-8B&#xff1a;实现浏览器内图片实时分析插件 你是不是经常在网上看到一张图片&#xff0c;想知道里面有什么&#xff1f;或者想快速提取图片里的文字信息&#xff1f;以前&#xff0c;这种功能往往需要依赖复杂的后端服务。但现在&#xff0c;…...

忍者像素绘卷保姆级教程:从Docker Compose启动到UI界面汉化配置

忍者像素绘卷保姆级教程&#xff1a;从Docker Compose启动到UI界面汉化配置 1. 环境准备与快速部署 在开始使用忍者像素绘卷之前&#xff0c;我们需要先准备好运行环境并完成部署。这个步骤非常简单&#xff0c;即使你是Docker新手也能轻松完成。 1.1 系统要求 确保你的系统…...

LabView用户登录程序:密码登录系统、用户管理、Access数据库制作

labview用户登录程序&#xff0c;可以直接用做密码登录系统&#xff0c;用户管理&#xff0c;实用强&#xff0c;使用方便&#xff0c;采用access数据库制作。最近在搞一个LabVIEW的项目&#xff0c;需要实现一个用户登录系统&#xff0c;顺便还带点用户管理的功能。琢磨了一下…...