C++学习 第十章

1.面向对象编程的最重要的特性

  • 抽象
  • 封装和数据隐藏
  • 继承
  • 多态
  • 代码可重用性

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

  • 类的定义方式
    1.类声明:以数据成员的方式描述数据部分,以成员函数的方式描述共有接口。
    2.类方法定义:描述如何实现类成员函数。

通常,C++程序员将接口(类定义)放在头文件中,并将实现(类方法的代码)放在源代码文件中。我们也采用这种典型做法,为了帮助识别类,我们使用一个常见但是不通用的约定,将类的首字母大写。下面看一个类定义的工作方式:

//stock00.h
#ifndef STOCK00_H_
#define STOCK00_H_
#include<string>
//关键字class指出下列代码是一个类的设计
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

//可以使用class后的类名称创建两个类的对象
//下面就是创建的两个类的对象sally和solly
Stock sally;
Stock solly;
  • 访问控制:
    private和public也是新的关键字,他们描述了对类成员的访问限制。使用类对象的程序都可以直接访问到共有部分(public),但是只能通过公有成员函数(或友元函数)来访问对象的私有成员。例如:要修改Stock类的shares成员,只能通过Stock的成员函数。因此,公有成员函数是程序和对象的私有成员之间沟通的桥梁,提供了对象和程序之间的接口。C++中还提供第三个关键字protected,在后面介绍。
  • 封装性
    类定义尽可能将公有接口和实现细节分开,公有接口表示设计的抽象组件,将实现细节放在一起将他们他们与抽象分开被称为封装。数据隐藏也是一种封装。 将类函数定义和类声明放在不同文件中也是一种封装。
  • 数据隐藏的好处
    数据隐藏不仅可以防止直接访问数据,还让开发者无需了解数据是如何被表示的。作为类的使用者,并不需要知道数据是使用哪种方法表示的,只需要知道各种成员函数的功能即可。将实现细节从端口设计中分离开来,如果以后有更好的,实现数据表示或成员函数细节的方法,可以对这些细节进行修改。而不需修改程序接口。
  • 控制对成员的访问 公有和私有
    类很像是一个结构类型,事实上C++中对结构进行了扩展,使之拥有了和类相同的特性,而类和结构的唯一区别就是,类默认的存储类型是private也就是私有的,而结构默认的存储类型是public,就是公有的。类要求数据隐藏,所以一般都把数据放入私有部分中,使用公有函数对他们进行控制。
class World
{
   
	//上面默认声明为private
	float mass;
	char name[20];
public:
	void tellall(void);
	...
}

3.实现类成员函数

  • 定义成员函数时,使用作用域解析运算符::来标识函数所属类
    作用域解析运算符确定了方法定义对应的类的身份,类中的其他成员函数调用类中的函数时是不需要加作用域解析运算符的,但是在类声明和方法定义之外使用update()时,则需要特殊的方法。
  • 类方法可以访问类的private组件
    类的私有数据成员,是不能试图通过非成员函数访问的(友元函数除外),只有通过类的公有函数才能访问他们。
//定义成员函数
void Stock::show()
{
   
	...
}
//类方法访问private组件
void Stock::show()
{
   
std::cout << "Company: " << company
		  << " Shares: " << shares << endl;
}

4.内联方法
在定义位于类声明中的函数都将自动称为内联函数,也就是说Stock::set_tot()是一个内联函数。类声明常将短小的成员函数作为内敛函数,set_tot()符合这样的要求。如果愿意,也可以在类声明之外定义成员函数,使其称为内联函数,为此,只需要在类的实现部分中定义韩式时使用inline限定符即可。
不过需要注意的是内联函数的规则,要在每个使用它的文件中进行定义,确保内联定义在每个文件中都是可用的,最简便的方法就是:将内联定义放在头文件之中。

//默认情况下的内联函数
//set_tot() 就是一个内联函数
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();
};

//显式声明的内联函数
class Stock
{
   
private:
	std::string company; //公司名称
	long shares;  //股票数量
	double share_val; //每股价格
	double total_val; //总价
	void set_tot();
public:
	void acquire(const std::string & co, long n, double pr);
	void
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值