C++-对象和类

对象和类

(1)   C++中的类

类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。

如下头文件看起来像一个结构声明,只是还包括成员函数、公有部分和私有部分等内容。


//stock00.h -- 股票类接口
//version 00
#ifndef STOCK00_H_
#define STOCK00_H_
#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 // !STOCK00_H_

(1)   实现类成员函数:

1.     定义成员函数时,使用作用域解析运算符(::)来标识函数所属的类;

2.     类方法可以访问类的private组件。

//stock00.cpp -- 实施股票类
//version 00
#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)
{
	if (num < 0)
	{
		std::cout << "Number of shares purchased can't be negative."
			<< "Transaction is aborted.\n";
	}
	else
	{
		shares += num;
		share_val = price;
		set_tot();
	}
}
void Stock::sell(long num, double price)
{
	using std::cout;
	if (num < 0)
	{
		cout << "Number of shares purchased 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)
{
	share_val = price;
	set_tot();
}
void Stock::show()
{
	std::cout << "Company: " << company
		<< " Shares: " << shares << '\n'
		<< " Share Price: $" << share_val
		<< " Total Worth: $" << total_val << '\n';
}

如上例,这种使数据私有并限于对公有函数访问的技术允许我们能够控制数据如何被使用。 此外,由于函数set_tot()只是实现代码的一种方式,而不是公有接口的组成部分,因此这个类将其声明为私有成员函数(即编写这个类的人可以使用它,但编写代码来使用这个类的人不能使用)。这种方法的主要价值在于,通过使用函数调用,而不是每次重新输入计算代码,可以确保执行的计算完全相同。 另外,如果必须修订计算代码,则只需在一个地方进行修改即可。

其定义位于类声明中的函数都将自动生成为内联函数,因此Stock::set_tot( )是一个内联函数。也可以在类声明之外定义成员函数,并使其成为内联函数。 为此,只需在类实现部分中定义函数时使用inline限定符即可。

class Stock
{
private:
	...
		void set_tot();      
public:
	...
};
inline void Stock::set_tot()
{
	total_val = shares * shares_val;
}

(3)   使用类

客户服务器模型: OOP程序员常依照客户/服务器模型来讨论程序设计。在这个概念中,客户是使用类的程序。类声明(包括类方法)构成了服务器,它是程序可以使用的资源。 客户只能通过以公有方式定义的接口使用服务器,这意味着客户(客户程序员)唯一的责任是了解该接口。 服务器(服务器设计人员)的责任是确保服务器根据该接口可靠并准确地执行。服务器设计人员只能修改类设计的实现细节,而不能修改接口。 这样程序员独立地对客户和服务器进行改进,对服务器的修改不会对客户的行为造成意外的影响。

//usestock0.cpp -- 客户程序
//和stock00.cpp一起编译
#include<iostream>
#include"stock00.h"
int main()
{
	Stock fluffy_the_cat;
	fluffy_the_cat.acquire("NanoSmart", 20, 12.50);
	fluffy_the_cat.show();
	fluffy_the_cat.buy(15, 18.125);
	fluffy_the_cat.show();
	fluffy_the_cat.sell(400, 20.00);
	fluffy_the_cat.show();
	fluffy_the_cat.buy(300000, 40.125);
	fluffy_the_cat.show();
	fluffy_the_cat.sell(300000, 0.125);
	fluffy_the_cat.show();
	std::cin.get();
	return 0;
}






猜你喜欢

转载自blog.csdn.net/ezra1991/article/details/80888923