C++primer初学者:对象和类的小应用

#ifndef STOCK00_H_
#define STOCK00_H_
//using namespace std;
#include<string>

class Stock
{

private:				//可以不写,这是默认的
	std::string company;
	long shares;
	double share_val;
	double total_val;
	void set_tot(){total_val=shares*share_val;}
public:
	void acquire(const std::string &co,long n,double pr);
	void buy(long num,double price);
	void sell(long num,double price);
	void update(double price);
	void show();
};
#endif

1:首先,可以将类的定义放在头文件中,另外,定义类时,设置了访问控制权限。访问类对象的程序都可以直接访问共有部分(public),但是,对于私有部分的访问,只能通过共有成员函数来访问,例如,修改shares的值时,只能用update函数来修改。(看起来是不是和结构类似,定义该类的对象时,也和结构类似,两者的区别是结构的实属性石public而类是private的)。

2:类设计尽可能将公有接口与实现细节分开。公有接口表示设计的抽象组件。将实现细节放在一起并将它们与抽象分开被称为是一种封装,将实现的细节隐藏在私有部分,就想stock类对set_tot()所做的那样,也是一种封装。 

3:定义对象和定义函数

定义类对象和结构的方法是一样的:Stock sally;

定义函数有两点特殊的地方:定义成员函数时,使用作用域解析运算符::来标识函数所属的类;类方法可以访问类的private。

void Stock::show();

这说明,类的对象可以访问,但其他对对象要访问,必须有特殊语句。也可以将这个成员函数在别的类中定义.

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

void Stock::acquire(const std::string &co,long 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();
}

void Stock::buy(long num,double price)
{
	using namespace std;
	if(num<0)
	{
		cout<<"Number of shates purchased can't be negative."<<"Transaction is aborted"<<endl;
	}
	else
	{
		shares+=num;
		share_val=price;
		set_tot();
	}
}

void Stock::sell(long num,double price)
{
	using namespace std;
	if(num<0)
	{
		cout<<"Number of sjares sold can't be negative."<<"Transaction is aborted."<<endl;
	}
	else if(num>shares)
	{
		cout<<"You can't sell more than you have!"<<"Transaction is aborted."<<endl;
	}
	else
	{
		shares-=num;
		share_val=price;
		set_tot();
	}
}

void Stock::update(double price)
{
	using namespace std;
	share_val=price;
	set_tot();
}

void Stock::show()
{
	using namespace std;
	cout<<"Company:"<<company<<endl;
	cout<<"Shares:"<<shares<<endl;
	cout<<"share price:$"<<share_val<<endl;
	cout<<"total worth:$"<<total_val<<endl;
}
这是函数定义方法,其中,set_tot()是内联函数,可以讲其放在定义类的头文件中,否则就要在每个使用它的文件中定义一次4:构造函数构造函数的目的是用来给类对象初始化,这样就不用通过调用函数来给她初始化了。构造函数名和类名相同,没有返回值,且成员变量不能当做构造函数的参数。构造函数有两种形式:Stock food=Stock("wang",25,2.2);stock food("wang",25,2.2);另一种和new一起用的情况:Stock *pstock=new Stock("wang",3,2.2);这条语句创建一个对象,并初始化,并将该对象的地址赋给pstook指针,则对象没有名称,用指针管理。构造函数不能被对象调用,因为构造函数就是用来创建对象的。如果创建对象,没有构造函数,如上面函数,那么就会有默认值。但是,如果设置了构造函数,就必须赋值。这样做的原因,是想禁止创建没初始化的对象。另外,一个对象可以赋给同类型的另一个对象:stock1=stock2;也可以现构造出一个对象,然后给已有对象赋值;Stock stock1=Stock("wang",1,1.1);stock1=Stock("Nsd",1,2.1);这样新构造出来的对象赋值给stock1后,就调用析构函数,释放他的内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值