chap4类与对象.pptVIP

  • 4
  • 0
  • 约1.76万字
  • 约 50页
  • 2017-03-15 发布于上海
  • 举报
第4讲 类与对象2 构造函数constructor 定义构造函数 具有构造函数的类如何创建对象 析构函数destructor 复制构造函数copy constructor 系统自动提供的类成员函数 系统会为每个类提供一些特殊的成员函数,包括: 构造函数constructor 在创建对象时:数据成员分配完内存后被自动调用。 析构函数destructor 在对象被销毁前被自动调用 先调用析构函数,而后释放数据成员的内存空间。 复制构造函数copy constructor 特殊的构造函数,在创建对象时调用,但是是在用一个已有的对象初始化另一个正在创建的本类对象时被调用。 特点 在类中可对这些成员函数进行自定义; 若在类中自定义了这些成员函数,则系统不再提供; 这些成员函数不能被显式调用而只能由系统自动调用; 在创建新对象或销毁对象时,这些函数会被自动调用。 1 构造函数(对象的初始化) 构造函数是类的成员函数,当创建对象时将被自动调用。 构造函数的调用 与定义简单类型的变量不同(仅分配内存),类类型比较复杂,在创建对象时: 系统首先为数据成员分配内存; 而后系统自动调用构造函数,执行构造函数体中的代码。 构造函数的作用 由于类中的数据成员多为private,因此可通过构造函数来完成对数据成员进行初始化。 构造函数的作用:初始化对象的数据成员,即完成对象的初始化。 (1) 构造函数的定义 构造函数是每个类都具有的一种特殊函数,特殊性表现在以下三点: 构造函数的名字必须与类名相同; 构造函数没有函数返回类型(无返回值),不能是void; 只有在创建对象时才被系统自动调用,它的作用是初始化数据成员,不能被用户显式调用(即不能使用:对象名.函数名(实参表) 形式)。 注意:一个常见的错误是在构造函数前放置一个void。例如: void Circle() //wrong! { } 构造函数函数的定义 构造函数的原型说明语句: 类名(形参表); 构造函数的定义形式: 类名::类名(形参表) { 数据成员的赋值; } 例:Circle类定义(增加构造函数) 关于构造函数的说明 每个类都具有构造函数,没有定义构造函数的类系统会自动为其提供一个构造函数(默认构造函数),该构造函数无参、函数体为空(即不做任何操作)。 若在类中自定义了构造函数,则系统不再提供默认的无参构造函数。 构造函数可重载,也可带默认参数值,可内联。 一个类中可定义多个构造函数(参数个数或类型不同) 在创建新对象时,系统会自动调用构造函数。 如类定义中无构造函数的定义,则会调用系统提供的默认构造函数; 若自定义了构造函数,则将调用自定义构造函数。 注意:在使用new 动态创建对象时,也会自动调用构造函数。 (3)根据构造函数形式创建对象 (i) 使用无参构造函数创建对象时,对象的创建形式为: 类名 对象名;或: 类名 对象名= 类名(); 如: Circle c; 或: Circle c= Circle(); Circle *p = new Circle;或: Circle *p=new Circle(); 注意:Circle a();//错,表示 声明了一个名为a、返回类型为Circle的函数。 (ii) 使用有参构造函数创建对象(必须为构造函数提供实参) (iii) 使用重载的构造函数创建对象 此时可根据构造函数的形式创建多个不同的对象。 (iv) 使用带默认参数的构造函数创建对象 此时可根据构造函数的形式创建多个不同的对象。 2 析构函数Destructor 对象的生存期结束时,在栈中为对象分配的内存空间将被释放,在释放之前会调用析构函数。 析构函数的调用 在对象的生命期结束前将被自动调用; 先调用析构函数; 而后释放数据成员的内存空间。 析构函数与构造函数相对。 当创建一个对象时,为数据成员分配内存,调用构造函数为数据成员初始化; 对象的生存期结束时,先调用析构函数,而后释放数据成员的内存空间。 析构函数的作用 并不是删除对象,而是在对象数据成员的内存空间释放前,进行清理工作;由于在动态申请的内存空间无法自动释放,因此可在析构函数中释放。 关于析构函数的说明 析构函数也是一种特殊的成员函数 析构函数名与构造函数相同,但必须在前面加上符号“~”,即:~类名 析构函数没有参数和返回值,因此一个类中只能定义一个析构函数,不能重载。 如果没有显式定义析构函数,那么编译器为每个类定义一个默认的析构函数,该默认的析构函数函数体为空,不做任何工作,定义形式为: 类名::~类名( ) { } 若类中自定义了析构函数,则系统不再提供默认的析构函数,在对象的生命期结束时,将调用自定义析构函数。 析构函数例:Circ

文档评论(0)

1亿VIP精品文档

相关文档