父类非虚函数,子类继承变成虚函数,会发生什么

This is bill This is bill 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
想法很奇葩,运行结果更是奇葩,大家看应该怎么解释一下,运行环境是vs2012 release Win32平台
代码:

```c++
#include<iostream>
using namespace std;

class A
{
public:
void foo()
{
printf("A类中:实foo()\n");
}
virtual void fun()
{
printf("A类中:虚fun()\n");
}
};

class B : public A
{
public:
virtual void foo()
{
printf("B类中:虚foo()\n");
}
void fun()
{
printf("B类中:实fun()\n");
}
};

class C : public B
{
public:
void foo()
{
printf("C类中:实foo()\n");
}
void fun()
{
printf("C类中:实fun()\n");
}
};

int main(void)
{
A a;
B b;
C oc;

A *ap = &a;
ap->foo(); //父实子虚
ap->fun(); //父虚子实
cout<<endl;

ap = &b;
ap->foo();
ap->fun();
cout<<endl;

cout<<"???"<<endl;
B *ptr = (B *)&a;
ptr->foo(); //为什么是c
ptr->fun(); //为什么是c
cout<<endl;

B *bp = &b;
bp->foo();
bp->fun();
cout<<endl;

bp = &oc;
bp->foo();
bp->fun(); //为什么不是B中
cout<<endl;

return 0;
}
```
运行结果:
...全文

相关推荐

Python子类继承父类构造函数详解

在本文里我们给大家分享一篇关于Python 子类继承父类构造函数的相关知识点内容,需要的朋友们跟着学习下。

weixin_38736018

C++类继承之子类调用父类的构造函数的实例详解

主要介绍了C++类继承之子类调用父类的构造函数的实例详解的相关资料,希望通过本文大家能够掌握C++类继承的相关知识,需要的朋友可以参考下

weixin_38609765

c++中子类对象不能调用父类中的虚函数

c++里,指针和引用是很重要的概念,这个程序不仅对指针和引用做了说明、使用,而且对子类不能继承父类虚函数也做了说明。

javaop

深入探讨C++父类子类中虚函数的应用

构造函数不能是虚函数,因为在调用构造函数创建对象时,构造函数必须是确定的,所以构造函数不能是虚函数。析构函数可以是虚函数。1.父类Father.h: 代码如下:#pragma onceclass Father{public: Father(void); virtual ~Father(void); virtual int getCount();public: int count;};Father.cpp 代码如下:#include “StdAfx.h”#include “Father.h”#include using namespace std;Father::Father

weixin_38672940

【Python】使用super()函数进行类的继承,将父类的方法和属性继承在子类的里。

学习对象:@丁七岁 https://blog.csdn.net/qq_43612538/article/details/105914720 1.创建School类,声明3个主属性 2.创建学生类Student,继承自School类的3个属性, 添加额外两个属性:班级class、学号s_no。 打印学生的所有信息print_info方法。 3.创建教师类Teacher,继承自School类, 添加额外两个属性:部门department、工号c_no。 添加方法:打印教师的所有信息print_info方法。 4.定义学生类、教师类的对象,然后分别调用print_info方法 实现各

weixin_38722944
评论 3
收藏 已收藏
分享
返回顶部
This is bill
This is bill 领域专家: 系统编程技术领域 领域专家: 系统编程技术领域
community_281 705 成员 253,687 内容