向刍回 1派生类具有基类的所有 成员。 2.派生类的构造函数自动 执行基类的构造函数 且基类的构造函数先执 行。基类构造函数的参 数由派生类传递 3.派生类中可对已有的成 员进行重新定义。 4可定义多重派生类。且 可利用虚基类使派生类 只保持一个基类的成员 拷贝
1. 派生类具有基类的所有 成员。 2. 派生类的构造函数自动 执行基类的构造函数, 且基类的构造函数先执 行。基类构造函数的参 数由派生类传递。 3. 派生类中可对已有的成 员进行重新定义。 4.可定义多重派生类。且 可利用虚基类使派生类 只保持一个基类的成员 拷贝
南8信多态的概念 (++ C+十 4+十 ++ 第十讲虛函数与多态性 8.1多态的概念 8.2虚函数 态
第十讲 虚函数与多态性 8.1 多态的概念 8.2 虚函数 §8.1 多态的概念
信多态的概念 (++ C+十 4+十 ++ 什么是多态性 指在一般类中定义的操作在被继承类继 承后可以有不同的表现形式。 例如:图形的求面积 类: shape 操作:求面积 类:椭圆 类:长方形 操作:求面积操作:求面积 解决的方法:用虚函数实现动态联编
§8.1 多态的概念 什么是多态性 指在一般类中定义的操作在被继承类继 承后可以有不同的表现形式。 例如:图形的求面积 类:shape 操作:求面积 类:椭圆 操作:求面积 类:长方形 操作:求面积 解决的方法:用虚函数实现动态联编
信多态的概念 (++ 例1:没有用多态性的例题 #include<iostream. h> class A 结果:AA public void print(i cout <<"A" class b: public a{∥定义派生类 public void print(){cout<<“B”;}};∥重新定义函数 id maine a ax b b p=&a;p> print();访问基类函数 p=&b;,p→ print();∥希望访问派生类函数
§8.1 多态的概念 例1:没有用多态性的例题 #include<iostream.h> class A { public: void print( ) { cout << "A "; } }; class B:public A { //定义派生类 public: void print( ) { cout << “ B ”; } }; //重新定义函数 void main( ) { A a, *p; B b; p= &a; p->print( ); //访问基类函数 p= &b; p->print( ); //希望访问派生类函数 } 结果:AA
8.2虚函数 (++ C+十 4+十 ++ 虚函数的定义方法 在基类中,在要被定义成虚函数的函数前加关键字 virtual 例如: virtual void print() 注意:1.关键字是 virtual 2.放在最前面,函数的类型不能忘, 如 virtual void print(():中的void 3.可只在基类中的函数加 virtual,在派生类中不加 但为了便于阅读可在所有要声明为虚函数的 前面都加 virtual 4.只需要在类定义文件,即头文件中的虚函数加 virtual,在cpp文件中就不要再加 virtual
§8.2 虚函数 虚函数的定义方法 在基类中,在要被定义成虚函数的函数前加关键字 virtual 例如: virtual void print( ); 注意:1. 关键字是 virtual 2. 放在最前面,函数的类型不能忘, 如 virtual void print( ): 中的 void 3. 可只在基类中的函数加 virtual,在派生类中不加, 但为了便于阅读,可在所有要声明为虚函数的 前面都加 virtual 4. 只需要在类定义文件,即头文件中的虚函数加 virtual, 在 cpp 文件中就不要再加 virtual