Lesson2: 掌握C++基本语法
C++经典语法与应用,类的编写与应用,构造与析构函数,函数的重载,类的继承,函数覆盖,基类与派生类的构造函数、析构函数先后调用顺序,如何在派生类构造函数中向基类的构造函数传递参数,this成员变量,类型转换的内幕,虚拟函数与多态性,引用和指针变量的区别与共同处。VC工程的编译原理与过程,将工程中不同的类拆分到不同的文件中,每一个类由一个.h和.cpp文件共同完成,头文件重复定义问题的解决,培养了学员良好的编程习惯,也为以后分析MFC AppWizard生成的工程奠定了良好基础。
1. C++中提供了一套输入输出流类的对象,它们是cin 、cout和cerr,对应c语言中的三个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。cin与>>一起完成输入操作,cout、cerr与<<一起完成输出与标准错误输出。利用cin和cout比C语言中的scanf和printf要方便得多,cin和cout可以自动判别输入输出数据类型而自动调整输入输出格式,不必像scanf和printf那样一个个由用户指定。
2. struct point{}与Class point{}最主要的区别是,在未定义情况下 struct point{}中成员默认为public,Class point{}中默认private。 3. C++主要特点:
① 封装性(Encapsulation):把数据与操作数据的函数组织在一起,使程序结构更加紧凑,提高类内部数据的安全性。
② 继承性(Inheritance):增加了软件的可扩充性及代码重用性;
③ 多态性(Polymorphism):使设计人员在设计程序时可以对问题进行更好的抽象,有利于代码的维护和可重用
4. C++中几个特性的实现技术和其它要注意的地方:
① 构造函数:创建对象本身,每个类必须有一个构造函数,否则不能创建对象。 ② 析构函数:将构造函数调用的空间释放。当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。
③ 根据析构函数的这种特点,我们可以在构造函数中初始化对象的某些成员变量,给其分配内存空间(堆内存),在析构函数中释放对象运行期间所申请的资源。
④ 重载:重载构成的条件:函数的参数类型、参数个数不同,才能构成函数的重载。发生在同一个类里。
⑤ 覆盖:发生在父类与子类中。::标明父类,(多重继承)。 隐藏,继承,
⑥ 多态(迟绑定):当C++编译器在编译的时候,发现Animal类的breathe()函数是虚函数,这个时候C++就会采用迟绑定(late binding)的技术,在运行时,依据对象的类型(在程序中,我们传递的Fish类对象的地址)来确认调用的哪一个函数,这种能力就做C++的多态性。
⑦ This指针:
1、this指针是一个隐含的指针,它是指向对象本身,代表了对象的地址
2、在对象调用pt.output(10,10)时,成员函数除了接受2个实参外,还接受到了一个对象s的地址。这个地址被一个隐含的形参this指针所获取,它等同于执行this=&pt。所有对数据成员的访问都隐含地被加上前缀this->。例如:x=0; 等价于 this->x=0。 ⑧ 类的继承特性:
⑨ 强制类型转换。如果CFish从CAnimal派生而来。则可以将鱼的对象转换为CAnimal的对象,而反之则不行。从现实中理解也是正常的,鱼可以是动物,而动物却不是鱼。转换时两个对象内存模型必须匹配,例如,char(1)可以转换成int(4),int不能转换成char。
⑩ #include
11 如何防止类的重复定义: 用#inndef Point_H_H #define Point_H_H class Point{}; #endif来防止
5、定义结构体和类时。例如Class Point{int x;int y;};要注意一定加上分号,结构体定义默认成员是public,而Class定义默认为private。
6、类的定义中,如果未指明成员类型,则缺省为private。而结构体中则缺省为public。 7、引用:引用经常用在函数的传参上。另外数值交换函数也经常用引用。例 change(int &x,int &y){int temp;temp=x;x=y;y=x}调用时即可以用 int a=3;int b=4;change(a,b);一般不用指针来作为参数进行数值交换。因为会引起歧义。
8、通常将类的定义放。h文件,而将其实现放在cpp文件中,别忘记了在cpp文件中#include \。h\
9、源文件cpp文件单独编译成obj文件。最后由链接器将与将要使用到的C++标准库类链接成exe文件,头文件不参加编译。所以在cpp文件中别忘记了加入#include \。h\
10、函数的覆盖,在子类中重写父类的函数,此时采用早期绑定的方法。如果加入了virtual,则将采用迟绑定的技术,在运行时根据对象的类型确定调用哪一个函数。此迟绑定技术是MFC的类的继承的精髓。