type
status
date
slug
summary
tags
category
icon
password
Property
类的基本思想是数据抽象(data abstraction)和封装(encapsulation)。
- 数据抽象是一种依赖于接口(interface) 和 实现(implementation) 分离的编程及设计技术。类的接口包括用户所能执行的操作;类的实现包括类的数据成员、负责接口实现的函数体以及其他私有函数。
- 封装实现了类的接口和实现的分离。封装后的类隐藏了它的实现细节,也就是说,类的用户只能使用接口而无法访问实现部分。
类要想实现数据抽象和封装,需要首先定义一个抽象数据类型。在抽象数据类型中,由类的设计者负责考虑类的实现过程;使用该类的程序员则只需要抽象地思考类型做了什么,而无须了解类型的工作细节。
C++类定义
采用
struct
,结构体中定义的成员变量或成员函数默认都是 public
属性的;使用 class
关键字,类中定义的成员变量或成员函数默认都是private
属性的:定义C++对象
访问数据成员
类的对象的公共数据成员可以使用直接成员访问运算符 (
.
) 来访问:类类型
每个类定义了唯一的类型。即使两个类的成员列表完全一致,它们也是不同的类型:
可以把类名作为类型的名字使用,从而直接指向类类型。或者,也可以把类名跟在关键字
class
或 struct
后面:类的声明
就像可以把函数的声明和定义分离开来一样,也可以仅仅声明类而暂时不定义它:
这种声明被称作前向声明(forward declaration),用于引入类的名字,在类声明之后定义之前都是一个不完全类型。
只要包含
{}
就算定义:不完全类型只能在非常有限的情景下使用:
- 可以定义指向不完全类型的指针或引用
- 也可以声明(不能定义)以不完全类型作为参数或返回类型的函数
对于只有声明而没有定义的类,只能声明它的指针类型或引用类型,不能直接声明其对象类型:
因为如果类没有定义,编译器就不知道为这个对象分配多大空间,但是类的指针或引用类型的大小与类大小无关。
当编译器遇到
}
表示一个类的定义结束。所以在一个类中,可以定义其自身的指针或引用类型,但是却不能定义其对象类型。因为类的定义还没有结束,无法确定其对象所占空间的大小。所以一个类的成员类型不能是该类本身。但是一旦类的名字出现,就可以被认为是声明过了,因此类可以包含指向它自身类型的引用或指针: