2008-02-23

析构函数 管理指针成员

关键字: cpp
析构函数就是这样的一个特殊函数,它可以完成所需的资源回收,作为类构造函数的补充撤销类对象时会自动调用析构函数 动态分配的对象只有在指向该对象的指针被删除时才撤销 当对象的引用或指针超出作用域时,不会运行析构函数,只有删除指向动态分配对象的指针或实际对象(而不是对象的引用)超出作用域时,才会运行析构函数 撤销一个容器(不管是标准库容器还是内置数组)时,也会运行容器中的类类型元素的析构函数容器中的元素总是按逆序撤销:首先撤销下标为 size() - 1 的元素,然后是下标为 size() - 2 的元素……直到最后撤销下标为 [0] 的元素 ...
2008-02-19

复制构造函数

关键字: cpp
只有单个形参,而且该形参是对本类类型对象的引用(常用 const 修饰),这样的构造函数称为复制构造函数 复制构造函数可用于:1. 根据另一个同类型的对象显式或隐式初始化一个对象2. 复制一个对象,将它作为实参传给一个函数3. 从函数返回时复制一个对象4. 初始化顺序容器中的元素5. 根据元素初始化式列表初始化数组元素 当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数 对于类类型对象,只有指定单个实参或显式创建一个临时对象用于复制时,才使用复制初始化 当形参或返回值为类类型时, ...
2008-02-17

友元 static 类成员

关键字: cpp
友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类 友元的声明以关键字 friend 开始,它只能出现在类定义的内部 友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受声明出现部分的访问控制影响通常,将友元声明成组地放在类定义的开始或结尾是个好主意 友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类 将一个类设为友元,友元类的所有成员函数都可以访问授予友元关系的那个类的非公有成员 一般地讲,必须先定义包含成员函数的类,才能将成员函数设为友元;另一方面,不必预先声明类和非成员函数来将它们设 ...
每个类都定义了自己的新作用域和唯一的类型,两个不同的类具有两个的类作用域 即使两个类具有完全相同的成员列表,它们也是不同的类型,每个类的成员不同于任何其他类(或任何其他作用域)的成员 在类作用域之外,成员只能通过对象或指针分别使用成员访问操作符 . 或 -> 来访问.操作符左边的操作数是一个类对象->操作符左边的操作数是指向类对象的指针 形参表和函数体处于类作用域中在定义于类外部的成员函数中,形参表和成员函数体都出现在成员名之后,这些都是在类作用域中定义,所以可以不用限定而引用其他成员函数返回类型不一定在类作用域中如果函数在类定义体之外定义,则用于返回 ...
类的成员函数可以访问该类的 private 成员 每个成员函数(除了static 成员函数外)都有一个额外的、隐含的形参 this,在调用成员函数时,形参 this 初始化为调用函数的对象的地址 使用 const 的函数称为常量成员函数,由于this 是指向 const 对象的指针,const 成员函数不能修改调用该函数的对象 const 对象、指向 const 对象的指针或引用只能用于调用其 const 成员函数,如果尝试用它们来调用非 const 成员函数,则是错误的 在成员函数中,不必显式地使用 this 指针来访问被调用函数所属对象的成员,对这个 ...
2008-02-14

类class(一)

关键字: cpp
最简单地说,类就是定义了一个新的类型和一个新作用域每个类可以没有成员,也可以定义多个成员,成员可以是数据、函数或类型别名一个类可以包含若干公有的、私有的和受保护的部分创建一个类类型的对象时,编译器会自动使用一个构造函数来初始化该对象构造函数一般就使用一个构造函数初始化列表来初始化对象的数据成员在类内部,声明成员函数是必需的,而定义成员函数则是可选的,在类内部定义的函数默认为 inline在类外部定义的成员函数必须指明它们是在类的作用域中成员函数有一个附加的隐含实参,将函数绑定到调用函数的对象将关键字 const 加在形参表之后,就可以将成员函数声明为常量const 成员不能改变其所操作的对象的 ...
2008-02-12

输入输出IO

关键字: cpp
每一个 IO 头文件都定义了 char 和 wchar_t 类型的类和标准输入/输出对象。IO 对象不可复制或赋值由于流对象不能复制,因此不能存储在 vector(或其他)容器中。形参或返回类型也不能为流类型。如果需要传递或返回 IO 对象,则必须传递或返回指向该对象的指针或引用对 IO 对象的读写会改变它的状态,因此引用必须是非 const 的。检测流是否用的最简单的方法是检查其真值所有流对象都包含一个条件状态成员,该成员由 setstate 和 clear 操作管理。这个状态成员为 iostate 类型,这是由各个 iostream 类分别定义的机器相关的整型。每个 IO 类还定义了三个 ...
2008-02-12

函数function

关键字: cpp
函数由函数名以及一组操作数类型唯一地表示。函数的操作数,也即形参,在一对圆括号中声明,形参与形参之间以逗号分隔。函数执行的运算在一个称为函数体的块语句中定义。每一个函数都有一个相关联的返回类型。C++ 语言使用调用操作符(即一对圆括号)实现函数的调用。函数体是一个作用域类似于局部变量,函数的形参为函数提供了已命名的局部存储空间。它们之间的差别在于形参是在函数的形参表中定义的,并由调用函数时传递函数的实参初始化。实参则是一个表达式。它可以是变量或字面值常量,甚至是包含一个或几个操作符的表达式。实参个数必须与函数的形参个数完全相同,实参必须具有与形参类型相同、或者能隐式转换为形参类型的数据类型。函 ...
2008-02-12

语句(...)

关键字: cpp
简单语句C++ 中,大多数语句以分号结束。程序语句最简单的形式是空语句(只有一个单独的分号)如果在程序的某个地方,语法上需要一个语句,但逻辑上并不需要,此时应该使用空语句。使用空语句时应该加上注释,以便任何读这段代码的人都知道该语句是有意省略的。无关的空语句并非总是无害的。在 C++ 中,对象或类的定义或声明也是语句。复合语句,通常被称为块,是用一对花括号括起来的语句序列(也可能是空的)。块标识了一个作用域,在块中引入的名字只能在该块内部或嵌套在块中的子块里访问。通常,一个名字只从其定义处到该块的结尾这段范围内可见。与其他大多数语句不同,块并不是以分号结束的。语句作用域有些语句允许在它们的控制 ...
2008-02-12

表达式

关键字: cpp
表达式由一个或多个操作数通过操作符组合而成。最简单的表达式仅包含一个字面值常量或变量。每个表达式都会产生一个结果。当一个对象用在需要使用其值的地方,则计算该对象的值。除了特殊用法外,表达式的结果是右值,可以读取该结果值,但是不允许对它进行赋值。操作符的含义——该操作符执行什么操作操作结果的类型——取决于操作数的类型回绕1. 无符号整数变量的值超过它能保存的最大值后,会发生回绕,回到 0 重新开始;2. 有符号变量回绕是从正的极端回绕到负的极端;对两个整数做除法,结果仍为整数,如果它的商包含小数部分,则小数部分会被截除操作符 % 称为“ ...