有时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联。 我们通过在成员的声明之前加上关键字 static 使得其与类关联在一起。静态成员可以是 public...
有时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联。 我们通过在成员的声明之前加上关键字 static 使得其与类关联在一起。静态成员可以是 public...
构造函数是 C++ 类的重要组成部分。 当我们定义变量时习惯立即对其进行初始化,而非先定义、再赋值: 就对象的数据成员而言,初始化和赋值也有类似的区别,如果没有构造函数的初始...
每个类都会定义它自己的作用域。 在类的作用域之外,普通的数据和函数成员只能由对象、引用、指针使用成员访问运算符来访问。 对于类类型成员则使用作用域运算符访问。 无论那种情况,...
我们定义一对相互关联的类,他们分别是 screen 和 window_mgr。 screen 表示显示器中的一个窗口。每个 screen 包含一个用于保存 sreen 内容的...
我们已经为类定义了接口,但是并没有任何机制强制用户使用这些接口。 类还没有封装,也就是说用户可以直达 sales_data 对象的内部并且控制它的具体实现细节。 在 C++ ...
类的作者经常要定义一些辅助函数,尽管这些函数定义的操作从概念上来说属于类的接口的组成部分,但它们实际上并不属于类本身。 定义非成员函数,通常把函数的声明和定义分离开。如果函数...
在 C++ 中,使用类定义自己的数据类型。 通过定义新的类型来反映待解决问题中的各种概念,可以使我们更容易编写、调试、修改程序。 类的基本思想使数据抽象和封装。 数据抽象是一...
函数指针指向的是函数而非对象。和其它指针一样,函数指针指向某种特定类型。 函数的类型由它的返回类型和形参类型共同决定,与函数名无关。 (*pf)两端的括号必不可少。否则 pf...
在大多数情况下,我们容易确定某次调用应该选用哪个重载函数。 然而当几个重载函数的形参数量相等以及某些形参的类型可以由其它类型转换得来时,这项工作就不那么容易了。 函数匹配的第...
在函数的很多次调用中它们都被赋予一个相同的值,此时我们把这个反复出现的值称为函数的默认实参。 调用含有默认实参的函数时,可以包含该实参,也可以省略该实参。 我们可以为一个或多...
如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数。 这些函数接受的形参类型不一样,但是执行的操作非常类似,当调用这些函数时,编译器会根据传递的实参类型推断...
return 语句终止当前正在执行的函数并将控制权返回到调用该函数的地方。 没有返回值得 return 语句只能用在返回类型是 void 的函数中。返回 void 的函数不要...
数组的两个特殊性质对我们定义和使用作用在数组上的函数有影响:不允许拷贝数组以及使用数组时会将其装换成指针。 尽管不能以值传递的方式传递数组,但是我们可以把形参写成类似数组的形...
每次调用函数时都会重新创建它的形参,并用传入 的实参对形参进行初始化。 形参的类型决定了形参和实参交互的方式。如果形参是引用类型,将绑定到对应的实参上;否则将实参的值拷贝后赋...
在 C++ 中,名字有作用域,对象有生命周期。 名字的作用域是程序文本的一部分,名字在其中可见。 对象的生命周期是程序执行过程中该对象存在的一段时间。 函数体是一个语句块。块...
函数是一个命名了的代码块,我们通过调用函数执行相应的代码。其可以有0个或多个参数,且通常会产生一个结果。 可以重载函数,同一个名字可以对应几个不同的函数。 一个典型的函数包括...
异常时指存在于运行时的反常行为,这些行为超出了函数正常工作的范围。 当程序的某部分检测到一个它无法处理的问题时,需要用到异常处理。 异常处理机制为程序中异常检测和异常处理这两...
跳转语句中断当前的执行过程。 break 语句负责终止离它最近的 while、do while、for、switch 语句,并从这些语句之后的第一条语句开始继续执行。 bre...
迭代语句通常称为循环,它重复执行操作直到满足某个条件才停下来。 while 和 for 语句在执行循环体之前检查条件, do while 语句先执行循环体,然后再检查条件。 ...
C++ 提供了两种按条件执行的语句,一种是 if ,它根据条件决定控制流。另一种是 switch , 它计算整个表达式的值,然后根据这个值从几条执行路径中选择一条。 if 语...