多态演示文件修改版.pptVIP

  • 7
  • 0
  • 约 26页
  • 2017-02-08 发布于江苏
  • 举报
多态演示文件修改版

C++中,通过基类指针调用一般的成员函数时采取的都是静态绑定。 可以通过基类指针操作基类对象 基类指针可以操作派生类对象(只能访问子类中,继承下来的基类成员) 多态性 多态性:同一个操作用于不同类的实例时,将导致不同的执行结果。 如:运算符 / * 静态绑定:在编译时能确定函数调用语句 如:函数重载 动态绑定:程序运行时,才能确定具体调用哪一个函数。 函数重载:多个函数使用同一函数名,但函数原型的形式参数的个数或者对应位置的类型不同 C语言不支持函数重载,所以每一个函数必须具有唯一的名字 例:求绝对值 int abs(int); 整型 loat fabs(float); 浮点型 C++支持函数重载:编译程序根据实际参数的个数与相应位置的类型选择调用哪一个版本的重载函数 #include iostream.h int add(int x,int y) { cout两个整数相加; return (x+y); } double add(double x,double y) { cout两个实数相加; return (x+y); } int main() { cout add(3,4) endl; //调用第一个add函数 cout add(10.8,2.6) endl; return 0; } 函数名相同,参数不同 #include iostream.h class A{ public: void show(){cout1111endl;} }; class B: public A{ public: void show(){cout2222endl;} }; void main() { A *p; A a1; p=a1; p-show(); B b1; p=b1; p-show(); } 指向基类对象的指针指向派生类对象后,可以访问派生类对象中由基类继承下来的成员,但不能访问那些派生类对象自己增加的成员。 这是由数据类型决定的,基类的指针,只能访问基类对象的成员 如何通过基类指针,访问派生类对象自己的成员? #include iostream.h class BASE { public: void who() { coutBASE\n; } }; class FIRST_D:public BASE { public: void who() { // 继承成员的重定义 coutFirst Derivation\n; } }; class SECOND_D:public BASE { public: void who() { coutSecond Derivation\n; } }; void main( ) { BASE b_obj;   FIRST_D f_obj;   SECOND_D s_obj; BASE *p; // 定义指向基类的指针p p = b_obj; p-who(); p = f_obj; p-who(); p = s_obj; p-who(); } 输出结果: BASE BASE BASE 不管p指向什么对象,通过p三次调用的都是基类的who函数 原因: 普通成员函数的调用采用的是静态绑定,通过指针引起的普通成员函数调用,仅仅与指针的基类型有关,而与此刻该指针正在指向什么对象无关 虚函数是类中被冠以virtual的成员函数 虚函数在公有继承结构中在一个或多个派生类中被重定义,在被调用过程中,通过指向基类的指针实现动态绑定 虚函数 #include iostream.h class A{ public: void show(){cout1111endl;} }; class B: public A{ public: void show(){cout2222endl;} }; void main() { A *p; A a1; p=a1; p-show(); B b1; p=b1; p-show(); } virtual virtual #include iostream.h class BASE { public: virtual void who() { coutBASE\n; } }; class FIRST_D:public BASE { pub

文档评论(0)

1亿VIP精品文档

相关文档