C++学习 类的简单应用

C++学习 类的简单应用
代码分析:

注:类(Class)定义时:标准格式,首字母大写

stock.h 代码

#ifndef STOCK_H_
#define STOCK_H_
#include <string>

class Stock                 //定义了一个Stock 的类
{
private:				    //私有成员
	std::string  company;   //定义一个字符类型的私有成员
	long shares;	    	//定义一个long形的变量
	double share_val;		//定义一个double形的变量	
	double total_val;		//定义一个double类型的变量
	void set_tot() { total_val = shares * share_val; }  //定义一个私有函数Set_tot()
public:					    //公有成员
	Stock();			    //定义默认的stock函数
	Stock(const std::string &co, long n = 0, double pr = 0.0);//定义了带参数的公有stock函数
	~Stock(); 		                  //定义了一个析构函数
	void buy(long num, double price); //定义了buy()函数
	void sell(long num, double price);//定义了sell() 函数
	void update(double price);	      //定义了update()函数
	void show();                      //定义了show()函数
	Stock & topval( Stock & s);		  //定义了一个有返回Stock 类的地址的总价比较topval()函数
};

#endif 

stock.cpp 代码

#include<iostream>
#include"stock.h"
Stock::Stock()   //编写的Stock类里面的stock()函数(函数不含参数),也叫默认构造函数,即定义时不给参数,默认以下面的方式赋值
{
	std::cout << "Default constructor called\n";  //打印输出
	company = "no name";            //私有变量company赋值
	shares = 0;						//私有变量赋值
	share_val = 0;					//私有变量赋值
	total_val = 0;					//私有变量赋值
}

Stock::Stock(const std::string &co, long n, double pr)  //函数内部带有参数,初始化赋值
{
	std::cout << "Constructor usig " << co << " called\n"; //打印输出
	company = co;								    	   //公司名称赋值
	if (n < 0)											   //默认赋值不能小于0,否则为0
	{													
		std::cout << "Number of shares can'tnbe negative ;"//打印输出
			<< company << " shares set to 0.\n";
		shares = 0;									 	   //股票数量赋值
	}
	else
		shares = n;										   //else 股票数量赋值
	share_val = pr;									       //股票价格赋值
	set_tot();										  	   //公有函数调用私有成员函数set_tot()函数
}

Stock::~Stock()											   //析构函数,函数形式固定,该函数不承担任何重要工作,可用于清理内存分配
{
	std::cout << "Bye, " << company << "!\n";  			   //打印输出

}
void Stock::buy(long num, double price)                    //定义stock类的buy()函数
{
	if (num < 0)										   //购买数不能小于0
	{
		std::cout << "Number of shares purchesed can't be negative."//
			<< "Transaction is aborted.\n";				   //打印输出
	}
	else
	{
		shares += num;									  //购买后现在持有的股票数量
		share_val = price;								  //现在股票的价格
		set_tot();										  //现在持有股票的价格
	}
}

void Stock::sell(long num, double price)     			  //定义stock类的sell()函数
{
	using std::cout;
	if (num < 0)										  //出售股票数量不小于0
	{
		cout << "Number of shares sold can't be negative."//打印输出
			<< "Transaction is aborted.\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)	                     //定义一个Stock的类的update函数()
{
	share_val = price;									 //读取当前时间的股票价格
	set_tot();											 //计算现在持有股票的总价
}

void Stock::show()							 			 //定义了一个Stock的股票的价格显示函数show()
{
	using std::cout;									 //表示使用名称空间std中的cout函数,后面就可以直接使用cout输出即可
	using std::ios_base;								 //表示使用名称空间std中的ios_base函数,后面就可以直接使用ios_base输出即可
	ios_base::fmtflags orig =   						 
		cout.setf(ios_base::fixed, ios_base::floatfield);//ios_base::fixed是设置cout为定点输出格式ios_base::floatfield是设置输出时按浮点格式,小数点后有6位数字 
	std::streamsize prec = cout.precision(3);			 //输出小数点后2位,第3位四舍五入

	cout << "Company: " << company<<"\n"			     //打印输出
		<< " Shares: " << shares << "\n";
	cout << " share price: $" << share_val << "\n";		 //打印输出
	cout.precision(2);									 //设置打印输出后1位,第2位四舍五入
	cout << " Total Worth: $" << total_val << "\n";		 //打印输出
	cout.setf(orig, ios_base::floatfield);				 //打印输出设置
	cout.precision(prec);								 //设置默认输出精度

}

 Stock & Stock::topval( Stock & s) 						 //定义了一个股票总价值比较函数topval()
{
	if (s.total_val > total_val)						 //如果被比较的总价大于比较的总价
		return s;										 //返回被比较的类的地址
	else
		return *this;									 //返回比较的地址
}

main.cpp 代码

#include<iostream>
#include"stock.h"

int main()
{
	using std::cout;								       //默认cout使用的是stdl里面的库
	cout << "Using constructors to create new objects\n";  //打印输出
	Stock stock1("NanoSmart", 12, 20.0);       			   //初始化Stock类 的变量stock1,并且在初始化时使用自身赋值的初始化
	stock1.show();										   //调用Stock类中的的show()函数
	Stock stock2 = Stock("Boffo objects", 2, 2.0);		   //初始化Stock类 的变量stock2,并且在初始化时使用自身赋值的初始化
	stock2.show();										   //调用Stock类中的的show()函数

	cout << "Assigning stock1 to stock2:\n";			   //打印输出
	stock2 = stock1;									   //赋值
	cout << "Listiing stock1 and stock2:\n";			   //打印输出
	stock1.show();										   //调用show()函数
	stock2.show();										   //调用show()函数

	cout << "Using a constructor to reset an object\n";	   //打印输出
	stock1 = Stock("Nifty Foods", 10, 50.0);	   		   //变量初始化
	cout << "Revised stock1:\n";						   //打印输出
	stock1.show();										   //调用show()函数
	cout << "Done\n";								       //打印输出

	Stock stock3 = { "Alibaba",10,180 };				   //列表初始化方式
	stock3.show();

	Stock stock4 = { "Tencent",100 };					   //省略参数的初始化
	stock4.show();

	Stock stock5 = {};									  //不含参数的初始化
	stock5.show();

	
	const Stock stock6 = { "Kingston" };				  //含有const 成员的调用 ,需要在class内部修改才可调用 show()函数
	stock6.show();

	Stock *top_val = &stock1;							  //定义一个Stock类的指针,并且指向一个Stock类 成员的一个地址
	top_val =&top_val->topval(stock2);			  		  //调用Stock类的topval()函数
	(*top_val).show();									  //调用show()函数
														  //或者使用 top->show();

	top_val = &stock1.topval(stock2);					  //另外一种实现的方式
	(*top_val).show(); 									  //调用show()函数


	Stock american_company[5] = {};						  //类对象数组初始化和赋值,默认为0
	american_company[0] = { "Mircosoft",1000,158 };		  //类对象数组0初始化
	american_company[1] = { "Amazon",400,800 };  		  //类对象数组1初始化
	cout << "---------------------------------------------------------\n";
	for (int i = 0; i < 5; i++)
	{
		american_company[i].show();						  //数组调用显示函数
	}
	cout << "---------------------------------------------------------\n";
	for (int st = 0; st < 5; st++)
	{
		top_val = &top_val->topval(american_company[st]);//调用top_val()函数,并且返回类的地址
	}
	cout << "The top_val company is :\n";				 //打印输出
	top_val->show();									 //调用show()函数

	system("pause");									 //运行暂停
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值