1 / 34
文档名称:

C 语言程序设计.ppt

格式:ppt   大小:628KB   页数:34页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C 语言程序设计.ppt

上传人:小落意 2022/7/26 文件大小:628 KB

下载得到文件列表

C 语言程序设计.ppt

相关文档

文档介绍

文档介绍:C 语言程序设计
本章主要内容
多态性
运算符重载
虚函数
纯虚函数
抽象类
2
重点和难点
重点:多态性的意义;实现多态性的两种途径:函数重载和虚函数,特别是运算符函数的重载;怎样利用虚函数实现运行时的多态性;15
运算符友元函数的设计
如果需要重载一个运算符,使之能够用于操作某类对象的私有成员,可以此将运算符重载为该类的友元函数。
函数的形参代表依自左至右次序排列的各操作数。
后置单目运算符 ++和--的重载函数,形参列表中要增加一个int,但不必写形参名。
运算符重载
16
运算符友元函数的设计
双目运算符 B重载后, 表达式oprd1 B oprd2 等同于operator B(oprd1,oprd2 )
前置单目运算符 B重载后, 表达式 B oprd 等同于operator B(oprd )
后置单目运算符 ++和--重载后, 表达式 oprd B 等同于operator B(oprd,0 )
运算符重载
17
++运算符的重载
利用成员函数重载++运算符
运算符重载
18
++运算符的重载
利用友元函数重载++运算符
运算符重载
19
静态绑定与动态绑定
绑定
程序自身彼此关联的过程,确定程序中的操作调用与执行该操作的代码间的关系。
静态绑定(静态联编)
联编工作出现在编译阶段,用对象名或者类名来限定要调用的函数。
动态绑定
联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。
20
静态绑定与动态绑定
静态绑定实例
21
静态绑定与动态绑定
动态绑定实例
动态绑定也称为运行时的多态
动态绑定指在程序运行时才确定将要调用的代码在哪里? 编译程序时无法确定.
相同的消息发送给不同的对象,将导致不同的行为
22
虚函数(总结)
虚函数是动态绑定的基础。
是非静态的成员函数。
在类的声明中,在函数原型之前写virtual。
virtual 只用来说明类声明中的原型,不能用在函数实现时。
具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
本质:不是重载声明而是覆盖。
调用方式:通过基类指针或引用,执行时会 根据指针指向的对象的类,决定调用哪个函数。
虚 函 数
23
例 (自学,跳过)
#include <iostream>
using namespace std;
class B0 //基类B0声明
{public: //外部接口
virtual void display() //虚成员函数
{cout<<"B0::display()"<<endl;}
};
class B1: public B0 //公有派生
{ public:
void display() { cout<<"B1::display()"<<endl; }
};
class D1: public B1 //公有派生
{ public:
void display() { cout<<"D1::display()"<<endl; }
};
虚 函 数
24
void fun(B0 *ptr) //普通函数
{ ptr->display(); }
void main() //主函数
{ B0 b0, *p; //声明基类对象和指针
B1 b1; //声明派生类对象
D1 d1; //声明派生类对象
p=&b0;
fun(p); //调用基类B0函数成员
p=&b1;
fun(p); //调用派生类B1函数成员
p=&d1;
fun(p); //调用派生类D1函数成员
}
运行结果:
B0::display()
B1::display()
D1::display()
*
25
虚析构函数(难)
何时需要虚析构函数?
当你可能通过基类指针删除派生类对象时
如果你打算允许其他人通过基类指针调用对象的析构函数(通过delete这样做是正常的),并且被析构的对象是有重要的析构函数的派生类的对象,就需要让基类的析构函数成为虚拟的。
虚 函 数
26
虚析构函数(难)
虚析构函数的使用
虚 函 数
27
抽象类
带有纯虚函数的类称为抽象类:
class 类名
{
virtual 类型 函数名(参数表)=0;
//纯虚函数
...
}
纯虚函数与抽象类
28
抽象类
纯虚函数与抽象类