C++中用父类指针指向子类实例,用父类指针调用虚函数,问调用的是子类的函数还是父类的函数,为何?

如题所述

你这个应该是调用的子类的函数,原因如下:

如果是虚函数,是可以通过基类的指针调用子类的函数的。

如果不是虚函数基类指针就只能调用基类函数
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-17
因为你题目硬指明已经定义为虚函数,所以,指向哪个子类实例,就调用哪个子类的函数。
这个过程一般称为动态联编

C++中用父类指针指向子类实例,用父类指针调用虚函数,问调用的是子类的...
如果是虚函数,是可以通过基类的指针调用子类的函数的。如果不是虚函数基类指针就只能调用基类函数

父类指针指向子对象,父类和子类有同名函数,但不是虚函数,当这个指着指 ...
虽然是通过基类指针调用,但是由于不是虚函数,所以不会实现多态,所以还是静态调用,通过指针类型来确定,所以调用的是父类函数!

c++ 父类指针转换为子类指针后调用子类的成员函数,为什么可以调用成功...
父类指针指向子类对象,然后调用子类对象所继承(或改写)的父类方法,这就是面向对象的核心--多态 其实也好理解,子类对象的类型与其父类的类型是共通的,他就是从父类继承来的,如果把子类比父类新增的成员变量或成员函数去掉,他就是一个父类的对象,当然可以调用自己的方法 不过,一般多态不是楼主这么用的...

c++实现多态时父类指针如何调用子类独有的数据成员?
实现多态时,C++允许父类指针调用子类独有的数据成员。此功能通过虚函数和动态类型识别(dynamic_cast)实现。首先,在父类中定义一个虚函数,该虚函数返回子类独有的数据成员。子类重写此虚函数,返回自己的数据成员。使用父类指针调用虚函数时,动态类型识别确定实际对象类型,返回正确数据。例如:c++ clas...

c++父类接口取子类并集还是交集
是交集。c++中,父类和子类虚函数都有对应的虚函数表,如果子类重写了虚函数,就会将新写的这个函数的地址放到他自己的表内,并且通过父类的指针指向子类所开辟的空间,这样就可以调用子类的方法。

C++中父类方法中可以调用子类的方法吗?
继承实际上是将父类中的成员拷贝一份,添加到子类中。这个过程对父类本身没有造成改变。也就是父类中是没有子类的方法的,也就无法调用了。在一种特殊情况下,可以用父类的指针指向子类对象,然后用这个指针可以调用子类中的函数。这属于多态的范畴,实际上还是子类对象调用子类方法,与题主给出的情况...

c++中的虚函数是什么?
C++中的虚函数是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多...

C++中虚函数的作用和虚函数的工作原理
虚函数在C++中实现多态性,主要作用在于实现动态绑定。基类定义虚函数,子类可以重写该函数。当子类重新定义了父类的虚函数后,当父类的指针指向子类对象的地址时,程序根据对象的实际类型动态调用子类的该函数,而不是父类的函数。这种动态调用发生在运行阶段,称为动态联编。非虚函数的静态联编效率更高,...

c++中的几个问题,在线等
问题1和3答案是相同的:就是类里面有指针成员。这说明指针指向的内容也需要复制一份,就是深拷贝浅拷贝的问题,网上搜下这个关键字有很多详细的解释;有指针就需要释放了,一般当然在析构函数里面释放,用父类指针指向子类对象的时候可能还需要虚析构函数。2:子类里面重写父类的那个函数呗,然后调用那个...

C++基类子类中,虚函数究竟是怎样判断该调用哪个函数的??
有虚函数时,每个对象的this指针都指向一个虚函数表(Virtual Table)的地址,这个表里存的就是虚函数的地址。编译的时候就决定了,普通函数调用时直接CALL这个函数的地址,而是虚函数时,是从这个虚表里取地址去调用的。

相似回答