C++ 虚函数就是允许类与类之间的函数进行重载的一种机制?

来源:百度知道 编辑:UC知道 时间:2024/06/22 20:17:02
虚函数就是允许类与类之间的函数进行重载的一种机制?不是虚函数类与类之间该函数就不能进行重载,这么理解有错吗?
不是虚函数类与类之间该函数就不能进行重载??????

回 vbtraz:我就是不太明白何为‘实际’,这个实际的意思不是形参的类型吗?

就像普通函数重载的根据传递过来的形参决定选用那个函数,这个不是这个‘根据实际’的意思吗?

回 Leland01:那虚函数的调用原理究竟是怎样的呢?我查过很多资料,可都没看明白,

他们说得像就是函数重载那样。

虚函数的意义在于, 根据类的“实际”类型调用函数。 而调用非虚函数是根据类的语法类型在编译时决定的

不是虚函数一样重载

一个父类指针可以安全地指向一个子类对象, 因为继承关系的意思就是“is type of”。 比如 class dog : public animal 这里的意思就是:“dog is type of animal,进一步说,一个dog的对象同时也是一个animal”。

所以如果你看到一个 animal * p; 这里p指向的东西未必是一个单纯的animal类对象,也可能是dog类对象或者其他的什么animal的子类对象。 虚函数的作用就表现在这里: 如果是普通函数,你用 p->xxx调用的肯定是animal类的成员函数(这就是根据p的语法类型调用),不管p实际指向的是个什么东西。 但如果是虚函数就可以保证p-> xxx 调用的是最确切的那个子类的成员函数(这就是按照实际类型调用)

你混淆了函数重载与虚函数的概念。

函数重载是多个函数具有相同的函数名字,但它们的函数参数列表是不同,无论是参数的类型或者是参数的数据,即它们的函数签名(函数签名是由函数的名字和函数的参数共同组成)是不同的。

虚函数则不一样,它们的函数签名是完全相同的,只是函数的定义具有多个版本。并要实现虚函数的两个类之间必须是父类与子类的关系,并不是所有的类成员函数都可以的。
虚函数是为了实现面向对象编程的中多态这一特性。

补充:虚函数的实现方法,用的最多的是用函数指针表实现的。你先弄清楚面向对象编程中的多态性,再来看虚函数的原理也许会更明白一些。

虚函数是为了引进多态和继承的关键。

你这么说也是可以的!