The-Way-to-CPlusPlus(I)(打印部分).ppt
文本预览下载声明
* 在所有{}外面的叫全局变量。 内置类型有bool, int, double等。 不等价性涉及到类的构造函数和拷贝构造函数,当讲完构造函数之后,我想大家就能完全明白()是什么意思了,但拷贝构造函数将被略过。 * 在C语言中我们已经见过一种很常用的复合类型——数组,任何类型,包括某个数组类型,加上一对方括号都可以构成一个新的数组类型;还有一个复合类型,是——指针。 注意,这里虽然有一个“=”,但却不是赋值运算符,而是“定义”。除非是函数形参列表中,否则引用的声明和定义必须在一起。 什么是声明?什么是定义? (作用与指针相仿)——形参与实参将共享同一个内存单元。 下面这个函数可以把a,b的值交换(注意这个函数写的不好,只是为了省地方才这么写)。 * 既然谈到了const和引用,就不得不提一个在C++中被强化的概念——左值和右值。这两个定义的来源是以赋值运算符为标准的。 左值既可以出现在赋值运算符的左边,也可以出现在右边;而右值只可以出现在右边。 注意左右两个a并不是同一个类型,左边是“指向整型的指针”,值是new运算符开辟的那个数组的首地址;右边是一个数组,数组本身并没有“值”的概念,但是在C和C++中,数组名可以转化为“指向数组的指针”,其值为数组的首地址。 * inline函数在C99标准里已有详细规定,内联函数的意义在于提示编译器,在调用该函数的地方可以直接把函数体粘贴过去,省去函数调用的开销;C++的inline函数与此基本相同。 有默认值的形参必须是该函数的最后一个或几个形参。 类型不同或数目不同均可,但若只有返回值类型不同则不行。 * 隐式类型转换就是自动的类型转换,不需要显式的写出来的。C语言的隐式类型转换有哪些?哪种转换不是隐式的? C语言中一个带括号的类型名称后面跟一个表达式,表示将表达式的结果强制转换为指定的类型。 C++中对应的写法为xxx_cast类型名表达式。 注意const_cast应该慎用,后两种cast将不再涉及。 * 我们休息一下,这是第一段的tag。今天讲的内容是非常简略的,建议大家以此为关键词,搜索相关资料。下面的两个网站是搜索的常用地点——第一个相信大家都认得,第二个可以当作C++的reference。 Have a break. * 结构体在C中的实质是一堆变量的集合;在C++中,struct关键字仍然有效,但其意义已经改变——仅仅是另外一种声明一个类的方法。一个类应当被看作一种类型,这种类型声明的变量叫做对象,或者叫做这个类的实例。 * 我们给出一个类声明的例子。 声明一个类,用class关键字,样式和声明一个结构体是差不多的。不同的是多了private和public这两个关键字,他们被称作成员的访问权限。声明在public之下的成员用法与结构中的一样,在任何地方都可以直接访问这个成员;声明在private之下的成员,则只能被本类中的成员函数访问,在类外部是不可见的。不过,这一点我们很快就会做出修正。除了这两种访问权限之外,还有一种protected,后面也会讲到他的意义,protected成员的访问权限与private成员一致。 如果声明一个成员之前没有出现访问权限的标识,则默认为private。struct也可以声明一个类,与class的唯一区别是——struct中没有访问权限的成员默认为public。这么做的原因是令C代码可以无障碍的迁移到C++。 person类中,三个成员变量与update()函数均是private的,在类之外不能访问。get_namecard()是public的成员函数,可以在类外部被访问。 名称为person,没有返回值类型的那个东西,也是一个函数,叫做类的构造函数;名称为~person (tilde person)的函数叫做类的析构函数,马上就会讲到他们的作用。最后我们定义了一个person类型的对象,或者叫person类的实例。C中定义结构体类型的变量,要在结构名前面加struct关键字,C++中不再有结构体的概念,被统一为类,前面说过,类应当被视为一种类型,一个整体,故而声明类类型的变量直接用类的名字就可以了。 * person类中声明了一个成员函数get_namecard(),那么,这个函数该怎么定义?一种方法是在声明的地方定义,另一种方法就是将定义写在类声明的外面,用域运算符,就是这两个冒号,指明get_namecard()是person的成员函数。 域运算符也可以用来指明某个标识符是定义在某个namespace中的。这样,可以不写using namespace xxx而引用该namespace下的标识符。 C++标准库的所有内容都统一声明在namespace std中。 * 通常情况下,指明this和不指明this完全等价,不过存在特殊的情况,
显示全部