57.对象数组

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

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

原文链接: https://www.cnblogs.com/codemagiciant/p/17149811.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    57.对象数组

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/319876

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月24日 下午3:29
下一篇 2023年2月24日 下午3:30

相关推荐