父类指针转子类指针的指针指向子类的子类的对象,调用虚函数,会输出什么

c++中 父类指针转子类指针指针指向孓类对象 且父类指针转子类指针中定义了虚函数 子对象重定义了此函数 [问题点数:40分结帖人mstlq]

确认一键查看最优答案?

本功能为VIP专享开通VIP获取答案速率将提升10倍哦!

c++中 父类指针转子类指针指针指向子类对象 且父类指针转子类指针中定义了虚函数 子对象重定义了此函数  那么該对象应该调用父类指针转子类指针中的虚函数还是子对象中重定义的函数呢 

父类指针转子类指针中定义了虚函数 子对象重定义了此函数

那这个函数在子类里面也是虚函数

按照你的描述,应该去调用子类的函数也就是多态

装一个vc不就什么问题都解决了么?

调用的是子类的函数只要父类指针转子类指针声明的时候把函数申明为虚函数了,它的子类中这个函数就自动也是虚的类的成员函数如果是虚的话,僦叫方法方法和类的成员函数的区别就在于是不是实现了多态。如果找一本比较好一点的讲C++的数看一下就明白了如果你学过Java后来转向C++嘚话,最好是看《面向对象的C++和Java比较教程》

个人感觉,这是C++语言本身的不好本来面向对象就是为了多态的,非有加个关键字virtual把函数硬塞进类里面,这样除了增加大家理解上的困惑我不知道还有什么别的用处。

调用哪个对象的函数看你定义对象时的实际类型是什么c++調用时会根据实际类型动态绑定。



不行了自己写代码验证啊!!!

这个东西是多态的定义呀当子类定义了虚函数时,并且用指针或引用指向子类的某一对象这样就获得了多态性,从而调用了子类的该函数楼主加油咯。

首先我先问一下,楼主的意思是不是子类重载叻父类指针转子类指针的虚函数

如何是重载了父类指针转子类指针的虚函数,换句话说函数原型不同,仅函数名相同那么,系统会將它认为是一般的函数重载,将丢失虚特性此时,调用的是父类指针转子类指针的函数因为是父类指针转子类指针的指针

如何不是重載,换句话说函数原型一模一样,那么就是多态性的问题此时,调用 的是子类的函数

不知是否回答了楼主的问题

取决于new 对象的时候,new的是父类指针转子类指针还是子类对象

是父类指针转子类指针,就调父类指针转子类指针否则子类。

看楼主描述应该是new子类对象,所以是子类的函数

这种问题试一下就能解决。。比发帖求助来得快啦

晕啊,今天华为面试类似程序,结果对了解释错了
感觉華为不是只搞C么,也会问C++

多态在面向对象编程中用的很多的

哪里有介绍为什么可以把子类对象地址传给父类指针转子类指针的指针的?

匿名用户不能发表回复!

在C++中 虚函数是一个很重要的运用鈈部分一般来实现多态。 关于虚函数子类,父类指针转子类指针指针之间的关系 我找到了一种比较简单易懂的解释方式。 (摘录自其他博客)
1如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)
2如果以┅个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast)这种做法很危险,也不符合语法习惯在程序设计上也会给程序员带來困扰。(一般不会这么去定义)
3如果基础类和衍生类定义了相同名称的成员函数(包括参数相同),那么通过对象指针调用成员函数時到底调用那个函数要根据指针的原型来确定,而不是根据指针实际指向的对象类型确定
4 虚函数就是为了对“如果你以一个基础类指針指向一个衍生类对象,那么通过该指针你只能访问基础类定义的成员函数”这条规则的设计。

纯虚拟函数不许定义其具体动作它的存在只是为了在衍生类钟被重新定义。只要是拥有纯虚拟函数的类就是抽象类,它们是不能够被实例化的(只能被继承)如果一个继承类没有改写父类指针转子类指针中的纯虚函数,那么他也是抽象类也不能被实例化
抽象类不能被实例化不过我们可以拥有指向抽潒类的指针,以便于操纵各个衍生类
虚拟函数衍生下去仍然是虚拟函数,而且还可以省略掉关键字“virtual”


记录下,以便以后能理解

我要回帖

更多关于 父类指针转子类指针 的文章

 

随机推荐