首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于函数调用的有关问题~诚心求教

2012-04-09 
关于函数调用的问题~~诚心求教!#include iostream.hclassStudent{public:voiddisplay(){cout Stude

关于函数调用的问题~~诚心求教!
#include <iostream.h>

class   Student
{
public:
void   display(){
      cout < < "Student 's   display " < <endl;
}
};

class   Teacher:public   Student
{

public:
void   display(){
      cout < < "Teacher 's   display " < <endl;
}
};

void   main()
{
    Student   *aa;
    Teacher   ta;
    Student   Stu;
   
    aa=&Stu;
    aa-> display();
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
运行结果:
Student 's   display
Press   any   key   to   continue
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

其中的语句:
aa-> display();

到底
调用的是Student类中的display()函数
还是Teacher类中从Student类继承过来的   display()函数呢?
诚心求教!

[解决办法]
非virtual函数没有多态性,结果完全取决于指针的静态类型。

aa既然是Student型的指针,那么执行的就总是Student类的display,因为display不是virtual的。

[解决办法]
调用student类的display
在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。
[解决办法]
aa是指向Student类的指针,调用的是Student的display

Teacher中的display覆盖了Student的display
[解决办法]
aa-> display();
aa是父类的指针,aa指向的是父类对象.
所以不管从静态绑定还是动态绑定来看犊会调用父类的函数.

实际情况是display不是虚拟函数,所以为静态绑定,编译的时候已经确定了调用的是父类的函数.

热点排行