Primer plus C++ 第十章 对象和类_类的设计

类设计的一般步骤:
1、提供类声明: 数据成员被放在私有部分,成员函数被放在公有部分;

格式:

class className
{

private:
	data member declarations
public:
	member function prototypes
}

2、实现类成员函数:

char * Bozo::Retort();

Retort()不仅是char *类型的函数,而是一个属于Bozo类的char *函数,全名为Bozo::Retort();
 

3、调用类成员函数:
a) 创建对象(类的实例),只需将类名视为类型名即可:

Bozo bozetta;

b) 类成员函数(方法)可通过类对象来调用:

cout << Bozetta.Retort();

/************************************************************************/
/* 
1)将类声明放在头文件中,而将类成员函数定义放在单独的一个源代码中;
2)类与结构体:
类描述看上去很像是包含成员函数以及public和private可见性标签的结构声明。
实际上,c++对结构进行了扩展,使之具有与类相同的特性。
他们之间唯一的区别就是,结构的默认访问类型是public,而类为private。
c++程序员通常使用类来实现类描述,而把结构限制为只表示纯粹的数据对象或是没有私有部分的类。
3)定义成员函数时,使用作用域解析操作符(::)来标识所属的类。
4)限定符std与using声明区别:
一般都是用 using namespace std; 而不用 std::cout 这种写法。
两者的区别:
cout 这个名字定义在命名空间 std 中。std 命名空间中还有其他名字,比如 cin、cerr 等,
如果你 using namespace std; 则这些名字全部可以使用,所以把一些你用不着的名字也包含进来了。
如果只是 std::cout ,则要使用 cin 时也必须写成 std::cin,比较麻烦,但是不会将不需要使用到的名字包含进来。
5)
*/
/************************************************************************/
#include 
#include 

class Stock
{
private:
	char company[30];
	int shares;
	double share_val;
	double total_val;
	void set_tot(){total_val = shares * share_val;}
public:
	void acquire(const char * co, int n, double pr);
	void buy (int num, double price);
	void sell (int num, double price);
	void update(double price);
	void show();
};


void Stock::acquire(const char * co, int n, double pr)
{

	std::strncpy(company, co, 29);
	company[29] = '\0';
	if (n < 0)
	{
		std::cerr << "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(int num,double price)
{

	if(num < 0)
	{

		std::cerr << "Number of shares purchased can't be negative."
			<< "Transation is aborted.\n";


	}
	else
	{
		shares += num;
		share_val = price;
		set_tot();

	}
}

void Stock::sell(int num, double price)
{
	using std::cerr;
	if(num < 0)
	{

		std::cerr << "Number of shares purchased can't be negative."
			<< "Transation is aborted.\n";


	}
	else if(num >  shares)
	{

		cerr << "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)
{

	share_val = price;
	set_tot();
}
void Stock::show()
{
	using std::cout;
	using std::endl;
	cout << "Company: " << company
		<< " Shares: " << shares << endl
		<< " Share Price: $" << share_val
		<< " Total Worth: $" << total_val << endl;
}

int main()
{
	using std::cout;
	using std::ios_base;
	Stock stock1;
	stock1.acquire("NanoSmart", 20, 12.50);
	cout.setf(ios_base::fixed);
	cout.precision(2);
	cout.setf(ios_base::showpoint);
	stock1.show();
	stock1.buy(15, 18.25);
	stock1.show();
	stock1.sell(400,20.00);
	return 0;
}

你可能感兴趣的:(C++语言学习,c++)