文档介绍:课题:
C++基础
目的要求:
掌握类的构造函数,析构函数与内联函数的定义与使用
掌握类对象的重载与派生的概念与操作
教学重点:
类对象的基本操作
教学难点:
类对象的基本操作
教学课时: 4
教学方法:
教学内容与步骤:
对象数组
C++中,可以创建对象数组。为了创建对象数组,构造函数的形式必须是:
(1)使用默认构造函数;
(2)若有用户自定义构造函数,则必须含有一个不带参数或具有一个带默认参数的构造函数。
构造函数和析构函数
构造函数和析构函数都是类的成员函数,但它们是特殊的成员函数,不用调用便自动执行,而且这些函数的名字与类的名字有关。
构造函数
构造函数是一种用于创建对象特殊的成员函数,当创建对象时,系统自动调用构造函数,不能在程序中直接调用。构造函数名与类名相同,一个类可以拥有多个构造函数(重载),构造函数可以有任意类型的参数,但不能具有返回类型。
构造函数的作用是:建立对象的基本结构,进行数据成员赋值初始化。即:初始化虚函数表;建立基类对象;建立非静态数据成员对象;安置虚基类对象信息;执行构造函数体中的代码。
如果一个类没有定义构造函数,编译器会自动生成一个不带参数的默认构造函数,其格式如下: <类名>::<默认构造函数名>()
{
}
在程序中定义一个对象而没有指明初始化时,编译器便按默认构造函数来初始化该对象。
定义了构造函数时,严格按定义格式(有参数的形式和无参数的形式等)调用。
构造函数对对象成员初始化
带参数的构造函数: 带参数的构造函数可以在创建对象时,用具体数值初始化数据成员和各种数据元素。
注意:构造函数的参数个数和类型规定了声明一个对象时,为对这个对象进行初始化所需要的初始值的个数和类型。
例如: Location A (100,200) ; // OK
Location B (10) ; // error
Location A ; // error
若有多个重载构造函数,系统自动寻找匹配。
构造函数可以像普通函数一样被重载,C++根据说明中的参数个数和类型选择合适的构造函数。若类 X 具有一个或多个构造函数,创建类 X 的对象时,C++会根据参数选择调用其中一个。
构造函数可以使用默认参数,但谨防二义性。
使用构造函数的限制:不能被继承,不能说明为虚函数,不能显式调用,不能取构造函数的地址。
练习:plex对象的两个重载构造函数,要求:一个构造函数用于输入复数,一个构造函数用于输入特殊复数即实数。
析构函数 当一个对象消失,或用new创建的对象用delete删除时,由系统自动调用类的析构函数。析构函数名字为符号“~”加类名,析构函数没有参数和返回值。一个类中只可能定义一个析构函数,所以析构函数不能重载。
析构函数是用于取消对象成员函数,当一个对象作用域结束时,系统自动调用析构函数。
析构函数的作用是进行清除对象,释放内存等。
当对象超出其定义范围时(即释放该对象时),编译器自动调用析构函数。在以下情况下,析构函数也会被自动调用:
(1)如果一个对象被定义在一个函数体内,则当这个函数结束时,该对象的析构函数被自动调用。
(2)若一个对象是使用new运算符动态创建的,在使用delete运算符释放它时,delete将会自动调用析构函数。
如同默认构造函数一样,如果一个类没有定义析构函数,编译器会自动生成一个默认析构函数,其格式如下:
<类名>::~<默认析构函数名>()
{
}
默认析构函数是一个空函数。
当一个对象退出其作用域时,都要调用析构函数。析构函数的作用是:执行析构函数中的代码,将对象占据的存储空间归还系统,做公共及用户要求的善后工作。
内联函数
内联函数(inline)也称为内嵌函数。当在一个函数的定义或声明前加上关键字inline则就把该函数定义为内联函数,它主要是解决程序的运行效率。
计算机在执行一般函数的调用时,无论该函数多么简单或复杂,都要经过参数传递、执行函数体和返回等操作,这些操作都需要一定的时间开销。若把一个函数定义为内联函数后,在程序编译阶段,编译器就会把每次调用该函数的地方都直接替换为该函数体中的代码,由此省去函数的调用及相应的保存现场、参数传递和返回操作,从而加快整个程序的执行速度。
请注意:内联函数的函数体有一些限制:内联函数中不能含有任何循环以及switch和goto语句;内联函数中不能说明数组;递归函数(自己调用自己的函数)不能定义为内联函数。
重载函数
函数重载又称为函数的多态性,是指同一个函数名对应着多个不同的函数。所谓“不同”是指这些函数的形参表必须互不相同:或者是形参的个数不同,