第九章 多态性与虚函数.ppt
文本预览下载声明
多态性的概念及其表现形式 顾名思义,多态的意思是一个事物有多种形态。从程序设计的角度看,通常指对于同一个消息、同一种调用,在不同的场合,不同的情况下,执行不同的行为。例如运算符的重载和虚函数。 多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。 消息──主要指对类的成员函数的调用。 C++ 系统支持二种多态性: 1.静态多态性──编译时的多态性,其具体实现主要有:函数重载(详见5.5.2,本章不再介绍)和运算符重载 2.动态多态性──运行时的多态性,其具体实现主要有:虚函数 运算符重载的方法 class Complex { public: Complex( ){real=0;imag=0;} Complex(double r,double i) {real=r;imag=i;} Complex complex_add(Complex c2); void display( ); private: double real; double imag;}; Complex Complex∷complex_add(Complex c2) {Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c;} void Complex∷display( ) {cout″(″real″,″imag″i)″endl;} 运算符重载函数作为类成员函数和友元函数 class Complex { public: Complex( ){real=0;imag=0;} Complex(double r,double i) {real=r;imag=i;} Complex operator+(Complex c2); void display( ); private: double real; double imag;}; Complex Complex∷operator+(Complex c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c;} void Complex∷display( ) {cout″(″real″,″imag″i)″endl;} 两者的区别 重载单目运算符 重载流插入运算符和流提取运算符 class Complex { public: Complex( ){real=0;imag=0;} Complex(double r,double i) {real=r;imag=i;} Complex operator+(Complex c2); friend ostream operator (ostream,Complex); void display( ); private: double real; double imag;}; Complex Complex∷operator+(Complex c2) {return Complex(real+c2.real,imag+c2.imag);} void Complex∷display( ) {cout (real,imagi) endl;} ostream operator (ostream output,Complex c) {output (c.real+c.imagi) endl; return output;} 为什么运算符“”重载函数返回类型是引用 coutc3c2; 相当于operator (operator (cout,c3),c2) 无论函数返回的是什么,它都会成为下一个运算符的左边的参数,返回cout的当前值以便连续的输出. 联编与虚函数 联编也称绑定,是指源程序在编译后生成的可执行代码经过连接装配在一起的过程,即是指计算机程序自身彼此关联的过程, 按联编工作来分: 1. 静态联编:联编工作在编译连接阶段完成。 2. 动态联编:联编在程序运行阶段完成。 虚函数引例 #include iostream.h class A { public: void display(){cout\tA::display()endl; }}; class B: public A { public: void display(){cout\tB::display()endl; }}; class C: public B { public: void display(){cout\tC::display()endl; }}; 虚函数 ? 虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来
显示全部