- 浏览: 73253 次
- 性别:
- 来自: 北京
最近访客 更多访客>>
文章分类
- 全部博客 (86)
- Java_Develop (6)
- Develop about Android (11)
- Develop about C (3)
- Develop about C++ (13)
- Develop about Objective-C (8)
- Develop about XML&DOM4J (6)
- Develop about JSP (7)
- Develop about Servlet (14)
- develop about MySql (4)
- Develop about Java_Socket (1)
- Develop about Java_Thread (4)
- Develop about IOS (8)
最新评论
-
eric_weitm:
在效率本身上而言,引用也有优势。另外,在编译器实现时,指针的传 ...
C++中的 引用和指针区别
一、多态性 派生类对象可以替代基类对象为基类的引用初始化或赋值。 函数的多态性其实就是对函数不同形式的声明的一种灵活应用。比如说,我们同名不同参数的函数就是对函数的一种多态性表现;同名同参就是函数的覆盖;如果我们用不同类型的参数和个数来声明不同或相同的函数,那么程序会根据我们调用实参的个数和类型进行匹配调用之前声明的函数模型,进行运算求值。 二、虚函数 在类的继承层次结构中,在不同的层次中可以出现同名同参(类型、个数)都相同的函数。在子类中调用父类的成员方法,可以使用子类对象调用时使用父类的作用域实现。 虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。 举一个实例来说明使用虚函数与不使用虚函数的区别,基类和派生类中都有同名函数。 不使用虚函数: 说明:定义一个Student类,让Graduate类继承Student类后,两个类中共同定义了一个display()方法,因为是在基类和派生类中分别定义的同名同参类,所以没有冲突,但是在调用的时候就出现了问题。我们在主函数中定义一个指针p指向父类对象的首地址,然后用指针p调用display()函数,没问题,我们可以打印出我们想要的数据。然后用指针p指向派生类Graduate的对象首地址,再次调用display()方法,你会发现Graduate中继承父类的成员对象没有被重写,还是父类中成员值,Graduate自己的成员打印了出来是没有问题的,在此说明通过一个指针指向不同的类分别调用不同层次中的同名同参类是不行的。这就需要用到虚函数来解决此问题了。 我们在上述程序中作一点修改:在Student类中声明display()时,加一个关键字virtual即 virtual void display(); 这样就把Student类display()声明成一个虚函数。这样就可以实现刚才想要的效果了。 说明:基类指针本来是用来指向基类对象的,如果用它指向派生类对象,则进行指针类型转换,将派生类对象的指针先转换为基类的指针,所以基类的指针指向的是派生类对象中的基类部分。 程序修改前,是无法通过基类指针去调用派生类对象中的成员函数的。虚函数突破这一限制,在派生类的基类部分中,派生类的虚函数取代了基类原来的虚函数,因此在使基类指针指向派生类对象后,调用虚函数时就调用了派生类的虚函数。只有用virtual声明了虚函数后才具有以上作用。如果不声明为虚函数,企图通过基类指针调用派生类的非虚函数是不行的。 把基类的某个成员函数声明为虚函数后,允许在其派生类中对该函数重新定义,赋予它新的功能,并且可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数。由虚函数实现的动态多态性就是:同一类族中不同类的对象,对同一函数调用作出不同的响应。 虚函数的使用方法: 1、 在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,方便使用。 2、 在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。 3、 在主函数中定义一个基类指针指向基类对象,引用基类函数;指向派生类对象,引用派生类函数。 C++规定:一个成员函数被声明为虚函数时,派生类中的同名函数都自动成为虚函数。所以派生类中同名函数加不加virtual都是可以的,习惯上添加,程序易懂。 注意:如果在派生类中没有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数。 通过虚函数与指向基类对象的指针变量的配合使用,就能方便地调用同一类族中不同类的同名函数,只要先用基类指针指向即可。如果指针不断地指向同一类族中的不同类的对象,就能不断调用不同类的对象中的同名函数。 如果在基类中定义的非虚函数在派生类中被重新定义,如果用基类指针调用该成员函数,系统会调用对象中基类部分的成员函数;如果用派生类的指针调用该成员函数,则系统对调用派生类对象中的成员函数,这不是多态,是不同类型的指针,没有用到虚函数
发表评论
-
C++中的静态关联与动态关联
2012-04-18 09:22 979一、关联:去顶调用的具体对象的过程称为关联,就是把一个函数 ... -
什么情况下应当声明虚函数?纯虚函数声明
2012-04-18 09:21 1290注意: 只能用virtual声明类的成员函数,使之成为虚 ... -
C++中类class与结构体struct的异同区别
2012-04-11 12:02 1052结构体struct是C语言中用来封装类似于类的模块。 因 ... -
C++中的共用体(union)结构解析与结构体(struct)共用体(union) 的区别
2012-04-10 10:02 2083共用体(union) 一、 基础概念 有时需要使几种不 ... -
动态内存分配和撤销方式剖析
2012-04-10 08:48 715动态内存分配和撤销方式剖析 在C语言中是利用库函数mal ... -
指向结构体变量的指针与链表结构的关系应用
2012-04-08 19:24 1208指向结构体变量的指 ... -
C++中的 自定义数据类型
2012-04-08 12:00 911自定义数据类型 一、结构体类型 1、 C++允许用 ... -
C++中的指针入门及剖析
2012-04-05 08:48 993C++——指针复习 一、 ... -
C++中的 引用和指针区别
2012-03-20 11:06 840引用是C++中的概念, ... -
C++数组进阶——一维数组的应用及起泡法思路
2012-03-30 15:35 923C++复习——数组 一、相关概念 1、具有相同属性有内在联 ... -
C++数组进阶——二维数组的应用及行列互换存储思路,擂台法求最大值
2012-03-30 15:58 1648二维数组的定义和引用 一、相关定义 1、具有两个下标的 ... -
C++字符数组函数深度剖析
2012-03-31 15:41 14271、 连接函数strcat 其函数原型为:strcat(ch ...
相关推荐
C++实验六 多态性和虚函数的应用 课程 实验报告 作业参考的良品!
c++课件 多态性与虚函数
1、理解多态性的概念。 2、熟练掌握虚函数的作用及其使用方法。 3、掌握静态关联和动态关联的概念和用法。 4、理解纯虚函数和抽象类的概念和用法。 (二)实验内容 1、定义一个类A,在A中有两个私有的整型变量a和b,...
多态性和虚函数
C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,...
第9章 多态性与虚函数 本章学习要求: 虚函数 多态性 静态与动态联编 9.1 多态性的概念 9.2 虚函数 9.3 静态绑定与动态绑定 9.4 纯虚函数和抽象类
C++语言编写面向对象程序,实现柱体体积和表面积的计算(圆柱和四棱柱为必 做内容,三棱柱为选做内容)。例如底面半径为 2、高为 4 的圆柱,体积为 50.27,表面积为75.40;以长为 3、宽为 2 的长方形为底面,高为 5 ...
C++继承,虚函数与多态性专题.C++继承,虚函数与多态性专题.
C++继承,虚函数与多态性专题C++继承,虚函数与多态性专题C++继承,虚函数与多态性专题C++继承,虚函数与多态性专题C++继承,虚函数与多态性专题
c++ 多态性 虚函数
C++虚函数表的测试代码,用于学习C++虚函数的调用关系。
多态性与虚函数课程设计 多态性与虚函数课程设计 多态性与虚函数课程设计 多态性与虚函数课程设计
用于学习c++虚函数及其多态性,是c++学习者能够轻松掌握虚函数以及多态。
多态性和虚函数章节中最后的代码! 多态性和虚函数章节中最后的代码! 多态性和虚函数章节中最后的代码! 多态性和虚函数章节中最后的代码!
C++中的虚函数与多态示例代码与详解…………………………
主要简述了c++中的多态性,附上代码,详细简述了c++中的多态性,请好好看!
C++ 多态性 虚函数 各种例子 自己写的 肯定运行成功
C++ 面向对象程序设计--多态性与虚函数 C++ 面向对象程序设计--多态性与虚函数 C++ 面向对象程序设计--多态性与虚函数
C++中的多态性实例,包括静态多态性和动态多态性(运算符的重载和虚函数)