第8章面向对象程序设计概述.ppt

3.派生类的构造函数和析构函数 派生类的构造函数除了对自己的数据成员初始化外,还负责调用基类构造函数使基类的数据成员得以初始化,当对象被删除时,派生类的析构函数被执行,同时基类的析构函数也将被调用。 格式: 派生类名(派生类构造函数总参数表):基类构造函数(参数表1)  {派生类中数据成员初始化}; 基类中有缺省的构造函数或没定义构造函数,则派生类构造函数的定义中可省略对基类构造函数的调用,而隐式调用缺省构造函数。 基类构造函数中,只有有参的构造函数,则派生类构造函数中必须 调用基类构造函数,提供将参数传递给基类构造函数的途径 派生类构造函数的调用顺序为先基类,后派生类。 派生类析构函数的执行顺序为先派生类,后基类。 说明: #includeiostream.h #include string.h class Staff {private: char name[30]; char sex; float wage; public: void display() {coutname:sex, ageendl; } Staff(char *n,char s,float w) { strcpy(name,n); sex=s; wage=w; } }; class Staff1:public Staff {private: int wt; public: Staff1(char *n,char s,float w,int t):Staff(n,s,w) {wt=t;} double addwage() {return(wt/10*80);} void display() { Staff::display(); coutwt, addwage()endl; } }; void main() {Staff1s(WangQiang,m,1526,21); s.display(); } [例8.12]派生类构造函数示例程序 派生类构造函数中调用基类构造函数 8.4多态性 发出同样的消息被不同类型的对象接收时导致完全不同的行为。 函数重载 运算符重载 基于虚函数的多态性 8.5.1 运算符重载 赋予已有的运算符多重含义,通过重新定义运算符使它能够用于特定类的对象以完成特定的功能。 [例8.13]重载“+”运算 ,用以实现两个字符串的连接 #include iostream.h #include string.h #include stdio.h class Str {private: char *s; int len; public: Str() { } Str(char *s1) { len=strlen(s1); s=new char[len]; strcpy(s,s1); } void print() {coutsendl; } Str operator+(Str s1) { return(strcat(s,s1.s)); } }; void main() { char str1[100],str2[100]; gets(str1); gets(str2); Str s1(str1),s2(str2),s3; s3=s1+s2; s3.print(); } 对加法运算符进行重载 s3=s1.operator+(s2) 重载形式: 重载为类的成员函数: 类名 operator 运算符(参数表) 程序中表达形式: c1 运算符 c2 编译程序解释形式: C1.operator 运算符(c2) 重载为类的友元函数: friend类名operator运算符(参数表) 程序中表达形式: c1 运算符 c2 编译程序解释形式: operator 运算符(c1,c2) 将例8.13中的加法运算符重载为友元函数的形式如下: friend Str operator+(Str s1,Str s2) {return(strcat(s1.s,s2.s));} 隐含了指向c1的this指针 this 指针 无需定义而隐含于每个类的成员函数中 指向正在被某个成员函数操作的对象 可以用*this来标识调用该成员函数的对象 通常情况下,程序中并不显式地使用this指针 [例8.14]自增运算符重载(this 指针使用示例) #include iostream.h class A {private: int x; public: A(int x1

文档评论(0)

1亿VIP精品文档

相关文档