首页 > 其他分享 >57.对象数组

57.对象数组

时间:2023-02-23 23:15:13浏览次数:25  
标签:const val 对象 double 57 数组 Stock void 构造函数

  声明对象数组的的方法与声明标准类型数组相同:

Stock mystuff[4];

  当程序创建未被显式初始化的类对象时,总是调用默认构造函数。上述声明要求,这个类要么没有显式地定义任何构造函数(在这种情况下,将使用不执行任何操作的隐式默认构造函数),要么定义了一个显式默认构造函数(就像这个例子一样)。每个元素( mystuff[0], mystuff[2]等)都是Stock对象,可以使用Stock方法:

mystuff[0].updarte();
mystuff[3].show();

  可以用构造函数来初始化数组元素。在这种情况下,必须为每个元素调用构造函数:

const int STKS = 4;
Stock stocks[STKS] =
{
    Stock("A", 12, 20.0),
    Stock("B", 200, 2.0),
    Stock("C", 130, 3.25),
    Stock("D", 60, 6.5)
};

  这里的代码使用标准格式对数组进行初始化:用括号括起来的、以逗号分隔的值列表。其中,每次构造函数调用表示一个值。如果类包含多个构造函数,则可以对不同的元素使用不同的构造函数:

const int STKS = 10;
Stock stocks[STKS] =
{
    Stock("A", 12.5, 20.0),
    Stock(),
    Stock("C", 130, 3.25),
};

  上述代码使用Stock(const string &co, long n, double pr)初始化stock[0]和stock[2],使用构造函数Stock()初始化stock[1]。由于该声明只初始化了数组的部分元素。因此余下的7个元素将使用默认的构造函数进行初始化。

  初始化对象数组的方案是,首先使用默认的构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的元素中。因此,要创建对象数组,则这个类必须有默认的构造函数。

usestok2.cpp

//2023年2月23日21:24:20
#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#include "stock20.h"

const int STKS = 4;
int main()
{
	//创建一个初始化的对象数组
	Stock stocks[STKS] =
	{
		Stock("A", 12, 20.0),
		Stock("B", 200, 2.0),
		Stock("C", 130, 3.25),
		Stock("D", 60, 6.5)
	};
	cout << "股票持有情况:" << endl;
	int st;
	for (st = 0; st < STKS; st++)
		stocks[st].show();
	//设置一个指针指向第一个元素
	const Stock* top = &stocks[0];
	for (st = 1; st < STKS; st++)
		top = &top->topval(stocks[st]);
	//顶点时期所持股票总价值
	cout << "\n所持股票的最大价值:";
		top->show();
	system("pause");
	return EXIT_SUCCESS;
}

stock20.cpp

#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
//stock20.h -- 增大版
#include <iostream>
#include "stock20.h"
#include <string>

Stock::Stock()//默认构造函数
{
	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 << "所购股票数不能为负" << company << "公司股票数设置为0" << std::endl;
		shares = 0;
	}
	else
		shares = n;
	share_val = pr;
	set_tot();
}

Stock::~Stock()//不做事的析构函数
{

}
void Stock::buy(long num, double price)//购买股票
{
	if (num < 0)
	{
		std::cout << "所购股票数不能为负" << std::endl;
	}
	else
	{
		this->shares += num;
		share_val = price;
		set_tot();
	}
}
void Stock::sell(long num, double price)//出售股票
{
	if (num < 0)
	{
		std::cout << "所出售股票数不能为负" << std::endl;
	}
	else if (num > shares)
	{
		std::cout << "所出售股票数不能超过持有股票数" << std::endl;
	}
	else
	{
		this->shares -= num;
		share_val = price;
		set_tot();
	}
}
void Stock::update(double price)//更新股价和资产
{
	update(price);
}
void Stock::show()const//显示信息
{
	std::cout << "购入股票公司名称:" << company << std::endl;
	std::cout << "购入股票数:" << shares << std::endl;
	std::cout << "购入股票的股价:" << share_val << std::endl;
	std::cout << "所持股票总价值:" << total_val << std::endl;
}

const Stock& Stock::topval(const Stock& s)const//最高时的股票总价
{
	if (s.total_val > total_val)
		return s;
	else
		return *this;
}

stock20.h

#pragma once
//stock20.h -- 增大版
#ifndef STOCK20_H_
#define STOCK20_H_
#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& 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;//显示信息
	const Stock& topval(const Stock& s)const;//最高时的股票总价
};
#endif

标签:const,val,对象,double,57,数组,Stock,void,构造函数
From: https://www.cnblogs.com/codemagiciant/p/17149811.html

相关文章

  • ES6-ES11 对象的简化写法
    视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>......
  • 数组数据结构的使用与代码编写(二)
    数组数据结构的使用与代码编写(二)定义数组Studentstudents[]=newStudent[3];students[0]=newStudent("张三",10);students[1]=newStudent("李四",11);stud......
  • java的数组与Arrays类源码详解
    java的数组与Arrays类源码详解java.util.Arrays类是JDK提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用。类的定义......
  • 算法随想Day21【二叉树】| LC669-修剪二叉搜索树、LC108-将有序数组转换为二叉搜索树
    LC669.修剪二叉搜索树相当于一个中序遍历吧,当某个节点<low时,其右子树的各个节点值虽然都比该节点值大,但仍可能存在<low的,所以要据于次节点,向其右子树进军遍历,等回溯时,del......
  • 深入学习jquery源码之创建科学、复用率高的对象
    常规创建对象的方式通过{},[]来定义数组和对象1.{}大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数。2.[]中括号,表示一个数组,也可以理解为一个数组对象......
  • JavaScript 中 Object,Map,Set 及数组遍历方法
    Object(对象)forin遍历出对象可枚举的"属性",包含继承的可枚举属性varperson={name:'小明',birth:1990,height:1.70};for(varxinperson){consol......
  • 面向对象高级1-static&继承
    1,static1,static修饰成员变量static静态,可以修饰成员变量、成员方法。成员变量按照有无static修饰可以分为两种:类变量:属于类,与类一起加载一次,在内存中只有一份,可......
  • refactorObjectProperties:裁剪、添加对象字段或更新字段内容
    介绍根据模板,自动对一个JS对象的字段进行裁剪、添加或更新字段内容。比如,做一个设置功能,其设置的数据(一个对象)存储在localStorage中,如果增加了设置项或删除设置项、......
  • PHP数组与XML之间的转换【转载】
    在开发中,我们经常会遇到数组与XML之间的互相转换,尤其在处理接口开发的时候经常用到,比如对方客户端POST一个XML格式的数据到服务器上,服务器上的程序要负责接收解析,还有需要将......
  • 【学习笔记】后缀数组
    容易忘记这个东西,干脆写篇博客把关键的地方讲清楚。(个人笔记向)voidgetsa(){ intlen=123; for(inti=1;i<=n;i++)cnt[id[i]=s[i]]++; for(inti=1;i<=len;i++)cnt[i]+......