第8章 对象和类
一、对象和类
1.对象是类的实例
(对象是一个具体可确定的东西,
比如我正在用的这支笔或者放在桌子上的那个苹果,
类可以是笔、水果这一类事物的名称)
2.对象的特征:
标识,对象的名字
状态,对象的数据成员
行为,对象的成员函数
3.类的成员
私有成员(private)
信息隐藏:被声明为private的数据成员只能被这个类的成员函数访问,其他的非成员函数无权访问
信息隐藏的目的:防止成员在类外被修改
访问:类的私有数据成员只有通过这个类的共有函数访问
公有成员(public)
类的公有成员函数可以在程序的任何部分调用,私有成员函数只能在同一个类的成员函数中调用
公有成员函数称为类的公共接口
一般地,类的数据成员声明为私有成员,成员函数都声明为公有成员
通常把公有成员放在类的开始部分,位于私有成员的前面
4.类的定义和使用对象
使用类的正确方法是:在main( )函数之前定义这个类和它的成员函数,然后在main函数中定义和使用这个类的对象
5.抽象数据类型
数据类型的实现细节对程序员是隐藏的,称为数据抽象
对于一个特定的数据类型,只需要了解哪些函数和操作可以使用、这个数据类型的合法取值范围即可
例如:
double类型取值范围在2.22507e-38 到1.7976e+38
平方根函数sqrt( )适用于整型和浮点型
6.构造函数:
数据的自动初始化中发挥重要作用,也常用于对象的私有数据成员初始化
构造函数是函数名和类名相同的类成员函数,当这个类被创建,构造函数会自动调用
构造函数永远不会被显式地调用,所以不能返回一个数据值,因此没有返回类型
构造函数特征:1 函数名与类名相同 2 无返回值类型
一个类中可以有若干个参数个数不同的构造函数,因此构造函数也可以被重载
经常在构造函数中用数据成员的初始化列表来代替赋值语句
Account:: Account( int No, float initial_balance)://这里有个冒号 Number( No ),balance(initial_balance)//数据成员的初始化 { }//注意这两个大括号不能省略
静态类数据成员
静态类数据成员独立于从类中创建的所有对象。→必须在类外对静态类数据成员赋值
静态数据成员对于类的所有对象只有一个副本,被该类的所有对象共享。
如果该类的一个对象修改了静态数据成员的值,那么该类的每个对象中它的值都会随之改变。
关键字:static
例:
class { private: static int a;//a也被称为类变量,与类有关
int b;//b被称为实例变量,与对象有关 };
类的成员函数也可以用return语句返回一个值
读值函数
double Account::get_balance() { return balance; }
成员函数get_balance被称为检查或读值函数
读值函数允许在类外读取类的私有数据成员的值
设值函数
void Account::deposit(double amount) { balance += amount; } void Account::withdraw(double amount) { balance -= amount; }
像deposit()和withdraw()这样的成员函数称为设值函数
设值函数用来修改类的私有数据成员的值
内联成员函数
类的成员函数可以是内联的
方法:1 加关键字inline;2 把函数定义在类内。
类的公共接口:一个成员函数的列表以及使用他们的方法。从关键字public开始 private结束。
类的实现:类的私有部分和成员函数的内部实现细节
命名空间:命名空间就是程序中的一个语句块。
在一个命名空间里,标识符的名字必须是唯一的,尽管这个名字先前可能在其他命名空间内使用了。
有两种方法可以区分两个同名的类
1 使用作用域运算符::
2 使用using语句
易错警示
1.类的声明花括号{ } 后有分号; !!!分号分号分号
2.构造函数无返回值类型
3.非内联函数使用作用域运算符 ::
4.在类中,成员的默认访问权限是私有的,如果要把一个成员函数指定为公有的记得加public