第13讲派生类的构造函数与析构函数 教学目的与要求: 了解派生类对象创建和释放的过程。 掌握派生类的构造函数和析构函数的构造规则。 教学内容提要: 1、派生类的构造函数和析构函数的执行顺序; 2、派生类的构造函数和析构函数的构造规则; 3、调整基类成员在派生类中的访问属性 °教学重点:派生类的构造函数和析构函数的构造规则。 教学难点:派生类的构造函数和析构函数的构造规则 教学进度:P123P136 教学过程
•教学目的与要求: 了解派生类对象创建和释放的过程。 掌握派生类的构造函数和析构函数的构造规则。 •教学内容提要: 1、派生类的构造函数和析构函数的执行顺序; 2、派生类的构造函数和析构函数的构造规则; 3、调整基类成员在派生类中的访问属性 •教学重点:派生类的构造函数和析构函数的构造规则。 •教学难点:派生类的构造函数和析构函数的构造规则。 •教学进度:P123~P136 •教学过程: 第 13 讲 派生类的构造函数与析构函数
(131派生类构造函数和析构函数的执行顺序】 对于派生类,由于其中包含有从基类继承来的和派生类中新声 明的数据成员,而派生类和它的基类都有相应的构造函数和析 构函数。 通常情况下: 当创建派生类对象时,首先执行基类的构造函数随后再 执行派生类的构造函数 当撤消派生类对象时,则先执行派生类的析构函数随后 再执行基类的析构函数
对于派生类,由于其中包含有从基类继承来的和派生类中新声 明的数据成员,而派生类和它的基类都有相应的构造函数和析 构函数。 【13.1派生类构造函数和析构函数的执行顺序】 通常情况下: 当创建派生类对象时,首先执行基类的构造函数,随后再 执行派生类的构造函数; 当撤消派生类对象时,则先执行派生类的析构函数,随后 再执行基类的析构函数
例13.1基类和派生类的构造函数及析构函数的执行顺序 #include<iostream. h> class baset public: Baseoi cout<< Constructing base classin";5 基类的构造函数 cBaseoi cout<< Destructing baes classIn";j 类的析构函数 class Derive: public Baset public Deriveoicout<< Constructing derived classin") 派生类的构造函数 Derive icout<< Destructing derived classin"; 派生类的析构函数 main Derive op; return 0;1
例13.1 基类和派生类的构造函数及析构函数的执行顺序。 #include<iostream.h> class Base{ public: Base(){ cout<<"Constructing base class\n"; } //基类的构造函数 ~Base(){ cout<<"Destructing baes class\n"; } //基类的析构函数 }; class Derive:public Base{ public: Derive(){cout<<"Constructing derived class\n";} //派生类的构造函数 ~Derive(){cout<<"Destructing derived class\n";} //派生类的析构函数 }; main() { Derive op; return 0; }
例132(调用构造函数和析构函数 #includesiostream.h> class B: publica class A public: B0; public: ~B(0; A0; void setz(int cREC, A0; int getztreturn z; void setx(int a)x=a int getsum (return x+gety0+z; void sety(int b)y=b; 3 private int getxO constreturn x; int int geto constreturn y;) protected: A:AO:x(1)2y(2) int x; private: cout<<“调用类A的构造函数” int y: dl
class B:public A { public: B(); ~B(); void setz(int c){z=c;} int getz(){return z;} int getsum(){return x+gety()+z;} private: int z; }; A::A():x(1),y(2) { cout<<“调用类A的构造函数” <<endl; } #include<iostream.h> class A { public: A(); ~A(); void setx(int a){x=a;} void sety(int b){y=b;} int getx() const{return x;} int gety() const{return y;} protected: int x; private: int y; }; 例 13.2 调用构造函数和析构函数
(续) cout<"调用类A的析构函数”<<endl; B:B0:z(3) cout<"调用类B的构造函数<<endl; B:~B0 cout<<"调用类B的析构函数<<end; void maino Bb cout<<x=<<bgetx(<<tY="<<b. getyo ItzA<<b. getz(<<endl cout<<"x+Y+z=<<b getsum(<<endl;
A:: ~A() { cout<<″调用类 A的析构函数″<<endl; } B::B():z(3) { cout<<″调用类 B的构造函数″<<endl; } B:: ~B() { cout<<″调用类 B的析构函数″<<endl; } void main() { B b; cout<<″X=″<<b.getx()<<″ \tY=″<<b.gety() <<″ \tZ=″<<b.getz()<<endl; cout<<″X+Y+Z=″<<b.getsum()<<endl; } (续)