声明对象数组的的方法与声明标准类型数组相同:
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