360 likes | 499 Vues
ç¬¬ä¸€ç« ä»Ž C 到 C++. C C++ Turbo C Boland C++ Microsoft C C++ Build Visual C++. C++ è¯è¨€æ–°å¢žçš„约定ã€ç¬¦å·åç§°å’Œè¿ç®—符. C++ è¯è¨€çš„æ–‡ä»¶æ‰©å±•å C å’Œ CPP C++ è¯è¨€çš„输入输出 cout å’Œ cin, << å’Œ >>. æ•°æ®ç±»åž‹å£°æ˜Žçš„å˜åŒ–. ä½ç½® 结构体定义实体 引用( References )类型 指针声明时的类型必须åŒå®žé™…指å‘的对象类型相一致. 新增. ç±» class 行注释符 // 动æ€å†…å˜åˆ†é…è¿ç®—符 new å’Œ delete.
E N D
第一章 从C到C++ • C C++ • Turbo C Boland C++ • Microsoft C C++ Build • Visual C++
C++语言新增的约定、符号名称和运算符 C++语言的文件扩展名 C 和CPP C++语言的输入输出 cout和cin, << 和>>
数据类型声明的变化 • 位置 • 结构体定义实体 • 引用(References)类型 • 指针声明时的类型必须同实际指向的对象类型相一致
新增 • 类class • 行注释符// • 动态内存分配运算符new和delete
C++语言中函数的新特性 函数声明、定义和引用 函数间传递参数的使用 函数的返回值 ①无缺省返回类型 ②引用类型可以充当返回值的类型 内联(inline)函数 函数的缺省参数 函数的重载(Overload function)
类和对象 • 类声明 • 类的三个区 • 类的成员函数 • 类的构造函数、析构函数 • 对象的声明 • 对象的使用 • 对象与指针
类声明 class <类名> { private: //私有成员 <成员表>; public: //公有成员 <成员表>; protected: //保护成员 <成员表>; … … }; 返回
类的三个区 • public(公有区) 凡声明在该区中的所有成员,当本类对象生成后可以被类外的全局程序或其它类中的成员函数直接访问。 • private(私有区) 凡声明在该区内的所有成员,当本类对象生成后只能被本类的成员函数直接访问。类外的全局程序则要通过一个定义在public区内的成员函数为媒介间接访问。protected(保护区) 凡声明在该区内的所有成员,当本类的派生类对象生成后是否能被直接访问视派生时的定义而有所区别。 返回
成员函数的定义 成员函数的定义: <类型> <类名> :: <函数名> (<参数表>) { <函数体> } 其中作用域运算符“::”指出成员函数的类属。没有类属的函数称为公共函数,在以前C语言中用到的函数均为公共函数。 返回
构造函数 构造函数是函数名与类名相同、且无任何返回类型的类成员函数。 构造函数可以用形参形式带进各成员数据的初值,也可以重载出多个构造函数。其中不带任何参数的构造函数又称为缺省构造函数。 其功能是对对象进行初始化,一般由一系列赋值语句构成,由系统自动调用。 返回
析构函数 函数名与类名相同,只是在前边加“~”符号的类成员函数。 析构函数不得返回任何值 析构函数不得带有任何参数 其功能是释放对象成员所占用的存储,一般由一系列的delete组成 由系统自动调用 返回
对象的声明 对象是类的实例。从技术上讲,一个对象就是一个具有某种类类型的变量。与普通变量一样,对象也必须先经声明才可以使用。 声明一个对象的一般形式为: <类名> <对象1>, <对象2>, … 返回
对象的使用 1.成员函数访问同类中的数据成员,或调用同类中的其他成员函数,可直接使用数据成员名或成员函数名。 2.在对象外访问其数据成员或成员函数需使用运算符“.”访问对象的成员。 例如 nAge = person1.GetAge(); 3.直接访问一个对象中的私有成员则属于非法操作,将导致编译错误; 4.同类对象之间可以整体赋值。 例如 person1 = person2; 5.对象用作函数的参数时属于赋值调用;函数可以返回一个对象。 返回
对象与指针 • 指向对象的指针声明 类名 * 指针变量名表; 例: CDog dog; CDog * ptr = &dog; ptr->Speak(); • 动态存储 例: ptr = new CDog; ptr->Speak(); delete ptr; • this指针:指向该对象本身的指针 返回
C++的类派生 • 派生关系 • 类的包容关系 • 类模板 • 虚函数(virtual function)
派生关系 在C++语言中一个类的的成员是由继承另一个类的部分或全部的成员与自身定义的成员所构成的结构关系称为派生关系。 将被继承的类称为基类(或父类),将继承基类后产生的类称为派生类。 C++语言中描述派生关系的语法格式为: class 类名:[public |private] 基类名 {…定义体};
继承方式 • 1.public继承方式 • 以此方式继承得到的派生类成员的属性与其在基类中定义的属性相同(但不包括private区)。 • 2.private继承方式 • 以此方式继承得到的派生类成员的属性将全部成为private属性(但不包括private区)。 • 3.类的保护属性(protected) • 前面未曾讲述的保护属性(即protected区)成员在使用上与private属性完全一样,唯一的不同便是当发生派生后,处在基类protected区的成员可被派生类直接访问。
public继承方式 以此方式继承得到的派生类成员的属性与其在基类中定义的属性相同(但不包括private区)。
private继承方式 以此方式继承得到的派生类成员的属性将全部成为private属性(但不包括private区)。
类的保护属性(protected) 前面未曾讲述的保护属性(即protected区)成员在使用上与private属性完全一样,唯一的不同便是当发生派生后,处在基类protected区的成员可被派生类直接访问。
派生类的构造函数 派生类构造函数必须在其定义体(不是声明体)中使用成员初始化表的格式来引用其上一级基类的构造函数 声明格式: 派生类名∷派生类构造函数(派生类参数表)[:基类名(基类参数表),…]{ …}
派生类的构造函数 ①引用上的执行顺序 将优先引用声明在成员初始化表内的基类构造函数,也就是先初始由基类派生来的成员,然后再执行自身的构造函数。 ②缺省引用关系 如在派生类构造函数的成员初始化表中没有指明要引用的基类构造函数,则一定会引用基类的缺省构造函数。
派生类的构造函数的例子 引用浮点数的构造函数 class ST_COM { protected: char name[10]; float mat ,eng; public: ST_COM(char *na,float ma,float en) : mat(ma),eng(en) {strcpy(name,na);} }; class EL_DEP:public ST_COM { float pex,elnet; public: EL_DEP(char *na,float ma,float en,float pe,float el,float d) : ST_COM(na,ma,en),pex(pe),elnet(el) {;} } 引用浮点数的构造函数 数组没有直接赋值的构造函数, 只能在函数体内赋值操作 引用ST_COM的构造函数 返回
类的包容关系 C++语言的包容关系具有下述特征: ²具有包容关系的两个类存在各自的独立性,即自身对象的存在不依赖于对方是否存在; ²被包容类对象只能以一个成员的身份被定义在包容类中,因而要受到成员所在区属性的影响; ²被包容类自身的成员不会由于存在包容关系而成为包容类成员; 返回
类模板 在客观模型中的类内的成员数据和成员函数的参数或返回值也有不能确定类型的情形。此时可应用类模板来取代这些未知的成分,待到运行时再动态地装入具体的类型。类模板声明的语法格式如下: template<class 替代类型标识符> 返回
虚函数的声明 在基类中对被认为未来将要出现覆盖的函数的原型声明(或定义)体的最前端前缀“virtual”关键字。 此后无论在其派生类中是否对该函数再做重定义,此函数都将成为恒久的虚函数。
使用虚函数方法应注意的要点 ①引用虚函数只能通过基类对象的指针或引用名来实现。这是概念的重申。 ②使用虚函数方法后,不得再使用类作用域符强制指明要引用的虚函数。 ③若派生类中没有再定义基类中已有的虚函数,则指向该类的对象指针或引用名引用虚函数时,总是引用距离其最近的一个基类中的虚函数。
面向对象程序设计(OOP) 基本概念:对象、类、消息 基本特征:抽象、封装性、继承性、多态性 优点: • 开发时间短,效率高,可靠性高,所开发的程序更强壮(重用,共享,可维护性,精简) • 适合于大程序长时间的开发工作
对 象(Object) 对象是包含现实世界物体特征的抽象实体,反映了系统为之保存信息和(或)与之交互的能力。 对象=数据+作用于这些数据上的操作=属性(Attribute)+方法(Method) 返回
类(Class) 类是将一类对象和其他对象区别开来的一组描述。 类是具有相同属性和相同的方法的对象的集合,它是一种既包含数据又包含函数的抽象数据类型。 类是对象集合的抽象,对象是类的一个实例,类和对象的关系可以看成是抽象和具体的关系。 返回
消 息(Message) 消息是向某对象请求服务的一种表达方式 对象之间通过传递消息来实现相互的通信 性质: • 同一对象可接收不同形式的多个消息 • 相同形式的消息可以送给不同的对象 • 消息的发送不考虑具体的接收者 返回
抽 象 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,忽略与主题无关的细节。 抽象包括两个方面: 过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上可能由一系列更低级的操作来完成。 数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。 返回
封 装 封装把过程和数据封藏起来,对数据的访问只能通过已定义的界面。 面向对象技术的基本概念就是现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。 封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。 返回
继 承 继承是一种联结类与类的层次模型。继承允许和鼓励类的重用,提供了一种明确表述共性的方法。 对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原来类的特性,新类称为原来类的派生类(子类),而原来类称为新类的基类(父类)。 继承性很好地解决了软件的可重用性问题。 返回
多 态 性 多态性是指允许不同类的对象对同一消息作出响应。 例如同样的加法,把两个时间加在一起和把两个整数加在一起的内涵肯定完全不同。 多态性包括参数化多态性和包含多态性。 多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 返回