读书人

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

发布时间: 2012-04-09 13:41:25 作者: rapoo

关于函数调用的问题~~诚心求教!
#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不是虚拟函数,所以为静态绑定,编译的时候已经确定了调用的是父类的函数.

读书人网 >C++

热点推荐