Download presentation
Presentation is loading. Please wait.
1
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计
2
“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 多态的概念 运行时多态 模板 重载与静态联编 覆盖与静态联编 虚函数与动态联编
函数模板 运行时多态 C++语言程序设计
3
编程技能 b C++语言程序设计
4
(一)函数模板 用户定义的类取代参数化类型 template<typename T> class Circle {
T max_value(T x,T y,T z) { T temp; if(x>y) temp = x; else temp = y; if(z>temp) temp =z; return temp; } class Circle { public: friend ostream &operator<<( ostream &, Circle & ); Circle( int a = 0, int b = 0, double c = 0.0 ) { x = a; y = b; radius = c; } int operator >(Circle m2) { if(radius>m2.radius) return 1; else return 0; } private: int x,y; //圆心坐标 double radius; //圆半径 }; C++语言程序设计
5
(一)函数模板 用户定义的类取代参数化类型
ostream &operator<<( ostream &out, Circle &C1 ) { out<<"x="<<C1.x<<" y="<<C1.y; out<<" radius="<<C1.radius; return out; } int main() { Circle C1(2,3,5),C2(3,5,8),C3(3,2,6); cout<<max_value(12,32,21)<<endl; cout<<max_value('a','A','9')<<endl; cout<<max_value(C1,C2,C3)<<endl; } C++语言程序设计
6
(一)函数模板 函数模板不支持参数自动转换 定义: int add(int a, int b);
由于参数可以自动转换,以下函数调用都是合法的: add(2.5, 4.4); add('a', 'd'); add('a',18); 定义: template <typename T> T max_value(T x,T y,T z); 以下函数调用是错误的: max_value(12,3.2,21); C++语言程序设计
7
(一)函数模板 重载函数模板 同时如下定义,构成重载: int max_value(int a, int b);
template <typename T> T max_value(T x, T y, T z); 重载函数模板的匹配过程是按照以下顺序来进行的: (1)寻找函数名和参数能准确匹配的非模板函数。 (2)如果没有找到,选择参数可以匹配的函数模板。 (3)如果还不成功,通过参数自动转换,选择非模板函数。 C++语言程序设计
8
(二) 运行时多态 运行时多态有什么用? pB->Draw(); 同一条语句,但每次调用执行的可能都是不同的函数:
(二) 运行时多态 运行时多态有什么用? pB->Draw(); 同一条语句,但每次调用执行的可能都是不同的函数: 增加了程序的可扩展性和可维护性 C++语言程序设计
9
(二) 运行时多态 注意虚析构函数的作用 派生类堆对象的地址存储到基类指针中,delete操作时,若需要执行派生类的析构函数,则必须设置为虚析构函数 C++语言程序设计
Similar presentations