一、C++语言与C语言的不同之处 1)c语言后缀.c,c++后缀.cpp。 2)当函数定义放在函数调用之后时,C程序的函数原型即声明有时可省略,而C++的函数声明不能省略,而且还要求函数的所有参数在函数原型的圆括号中声明。一个不带参数的C函数原型必须使用void关键字,而C++函数原型可以使用空参数表。 3)C++中用new和delete运算符取代C的内存分配和释放函数malloc()和free()。 4)const常量类型:用来表示一个“常值变量”与#define的区别: #define size 20 //不加;只是文本替换此后不再检查,可能产生负作用 Const int size=20; //加;替换时进行严格检查,只有当size是int型时才替换。 二、C++面向对象的程序设计 概述:面向对象不只是一种程序设计方法,还是一种建立客观事物模型、分析复杂事物的思想方法,他是以人们通常描述现实世界的方法来描述要解决的问题。 1. 结构化程序设计:是一种自顶而下、逐步求精的模块化程序设计方法。 类:对象是累的一个实例。类=数据结构+对数据进行操作的函数 面向对象的程序设计的基本特征:抽象、封装、继承和多态。 抽象:对一类对象进行概括,抽出他们共同的性质并加以描述的过程。 封装:将抽象得到的属性数据和行为代码有机的结合,形成一个具有类特征的统一体。 继承:一个新类可以从已有的类派生而来。 多态:不同对象对于同样的施加于其上的作用会有不同的反应。 2. 成员函数的定义形式与一般函数的定义形势基本相同,但如果在类的外部定义成员函数,必须在成员函数名前 加上类名和作用域限定符(::)。 一般将类的定义放在头文件(.h)中,类的实现放在源文件(*.cpp)中,二main主函数可以放在另一个源文件中。在源文件中用#include编译预处理指令包含头文件。 3. 对象:对象是类的一个实例,定义并实现了类,就可以利用类来声明对象,其形式与普通变量的声明类似。 例如:以下用类Time声明了对象t1,today和对象的指针pt1: Time t1,today; //声明对象t1,today Time *pt1=&t1; //声明指向对象t1的指针pt1 声明对象后,就可以像引用结构变量一样,利用成员运算符“.”或指向运算符“->”引用对象的公有成员,但注意不能引用对象的非公有成员。如:pt1->setTime()或t1.showTime() 4. 构造函数和析构函数:在声明对象时,对象一般需要进行初始化,及对成员变量进行初始化。在定义类时不能 对成员变量进行初始化,因为不能确定类中定义的成员变量是属于哪一个对象。 构造函数:是一种特殊的成员函数,特殊性在于:它不需要用户程序调用,就能在创建对象时由系统自动调用。其作用就是在对象被创建时利用初始值去构建对象,使得在声明对象时就能自动地完成对象的初始化。 析构函数:是在对象的生存期即将结束时由系统自动调用的。析构函数的作用与构造函数相反,用来在对象被删除前做一些清理工作和数据保存工作。 构造函数的名称与类名相同,析构函数的名称是在类明前加符号“~”构成(表达取反的意思)。注意,构造函数和析构函数不能有任何返回类型,包括void类型;析构函数不能有参数。下例说明了构造函数和析构函数的定义方法及执行顺序 5. 静态数据成员在储存类型上类似于一般的static静态变量,也具有全局性。 静态数据成员的属性也可以是公有、私有或保护的。对于公有静态数据成员,除了可以像一般数据库成员那样, 直接通过对象或在成员函数中访问它们,还可以利用类名加作用域限定符(::)来访问他们。对于私有和保护属性的静态数据库成员,只能在成员函数中访问它们。 由于静态数据成员不具体属于哪一个对象,因此不能构造函数或其他成员函数中对他们进行初始化,他们的初始化必须在类体外进行。 注意:静态成员函数只能访问类的静态成员(成员变量和成员函数),而不能访问非静态函数。解决这个问题的方法是将对象作为静态成员函数的参数,然后在静态成员函数中通过对象访问非静态成员。 |