C++对象和类概述

11 对象和类

11.1 过程式和面向对象编程

面向过程编程:先考虑函数,然后再细化到数据

面向对象编程:对象(数据+函数)

11.2 抽象和类

在计算中,抽象是根据与用户的接口来表示信息的关键步骤。

11.2.1 什么是类型?

总之,只当基本类型完成了三项工作

  • 1.决定数据对象需要的内存数量
  • 2.决定如何解释内存中的位(long和float在内存中占用的位数相同,但将它们转换位数值的方法不同)
  • 3.决定可使用数据对象执行的操作或方法

11.2.2 C++中的类

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

自定义类的思路:以股票为例

1.首先要思考要将什么作为一个基本单位:你可以把一个人目前持有的某只股票作为一个基本单位

2.需要哪些功能(方法)

1. 获得股票
2. 增持
3. 卖出股票
4. 更新股票价格
5. 显式关于所持股票的信息

3.需要存储哪些信息

1. 公司名称
2. 所持股票的数量
3. 每股的价格
4. 股票总值

4.定义类

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

什么是接口?

接口是一个共享框架,供两个系统交互时使用。—如在计算机和打印机之间或者用户或计算机程序之间。

接口的含义:让程序员能够编写与类对象交互的代码,从而让程序能够使用类对象。

img

11.2.3 访问控制

使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数来访问对象的私有成员。因此公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。

数据隐藏:程序无法访问对象的私有成员。它保证了数据的完整性。(不仅不允许程序员直接访问数据,而且确定了函数的接口,然后当你发现更好的方式实现函数时,你可以直接更改函数具体的实现而无需更改接口,这提高了程序的可维护性)

封装:数据隐藏(将数据放入类的私有成员),在私有部分中隐藏实现的函数细节,将类函数定义放在与类声明分开的文件中。

11.2.4 成员访问控制 Public or Private?

不必在类声明中使用关键字private,因为这是类对象的默认访问控制。

class World
{
        float mass; // private by default
        char name[20]; // private by default
    public:
        void tellall(void);
        ...
};

类和结构体的区别?

唯一的区别是结构体的默认访问类型是public,而类的默认类型是private。c++程序员通常使用类来实现类描述,同时将结构体限制为表示纯数据对象(通常称为普通的老式数据结构,或POD结构)。

11.2.5 实现类成员函数

类成员函数与普通函数的区别:

  • 1.定义类成员函数时,使用作用域解析运算符(::)来标识函数所属的类;
  • 2.类方法可以访问类的private组件

类作用域:

//这两个类成员函数相互不干扰
void Stock::update(double price);
void Buffoon::update()

一个类成员函数可以直接使用同类下的其他成员函数而无需::符号(在类定义或成员函数定义中都可),但是其他地方必须使用class::符号,eg:Stock::update()。

11.2.6 内联方法

定义位于类声明中的函数都将自动成为内联函数。

下面这两种定义是等价的:

class Stock // class declaration
{
private:
	...
	void set_tot() { total_val = shares * share_val; }//是个内联函数
public:
	...
}; // note semicolon at the end
#endif

class Stock
{
private:
	...
	void set_tot(); // definition kept separate
public:
	...
};
inline void Stock::set_tot() // use inline in definition
{
	total_val = shares * share_val;
}

11.2.7 方法使用哪个对象?

调用成员函数时,它将使用被用来调用它的对象的数据成员。

下面这两个函数调用使用的是各自的shares and share_val:

Stock kate, joe;
kate.show(); // the kate object calls the member function
joe.show(); // the joe object calls the member function

所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享同一组类方法,及每种方法只有一个副本。

在OOP中,调用成员函数被称为发送消息,因此将同样的消息发送给两个不同的对象将调用同一个方法,但该方法被用于两个不同的对象。见下图。

img

11.2.8 使用类

C++的目标是使得使用类与使用基本的内置类型(如int和char)尽可能相同。

基本上基本类型能做的自定义的类也能做。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jasmine-Lily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值