首页新闻找找看学习计划

C++-类的继承中基类与派生类中成员函数重定义与虚函数的区别

0
悬赏园豆:10 [待解决问题]

将基类中的一个函数定为虚函数,然后在派生类中重新定义这个函数和不定义虚函数,直接在派生类中重定义从基类继承的函数。。这两种用法有什么不同啊?感觉都是在做同样的事情啊。。为什么要分两种不同形式呢?我是新手,不太理解这个问题,大虾们请解答一下。。

C++
菜鸟明的主页 菜鸟明 | 初学一级 | 园豆:186
提问于:2017-11-05 22:25
< >
分享
所有回答(2)
0

在派生类中重新定义这个函数和不定义虚函数:派生类中隐藏了基类中的同名函数,和多态无关

直接在派生类中重定义从基类继承的函数 :派生类重写(覆盖override)了基类的同名函数,实现多态性。

西漠以西 | 园豆:1670 (小虾三级) | 2017-11-06 17:13
0

有虚函数实现的是多态,没有的话是重写。多态运行时可以动态识别用哪个函数,而重写一就是一二就是二,编译的时候就已经确定要调用哪个函数了。给你写一个简单例子:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

class A
{
public:
virtual void fun()
{
printf("i am A!\n");
}
};

class B : public A
{
public:
void fun()
{
printf("i am B!\n");
}
};


int main()
{
int i;
cin >> i;
if (i == 1)
{
A *a = new A();
a->fun();
}
else
{
A *a = new B();
a->fun();
}
system("pause");
}

这个程序输入1输出 i am A!其他输入输出 i am B!

如果把A类的virtual去掉就只会输出 i am A!

这只是一个最简单的例子实际使用要比这复杂的多,建议多看看相关书籍

水墨的心 | 园豆:361 (菜鸟二级) | 2017-12-08 17:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册