c++ - 静态多态性中的歧义

标签 c++ polymorphism

<分区>

实际上这是一个非常简单的问题,但这个问题一直困扰着我,我找不到合适的答案。

函数调用 d.show(); 对以下代码来说是如何明确的以及为什么 b->show();b = &d; 导致调用 Base_::show()?

#include <iostream>

using std::cout;

class Base_
{

     public:
          void show()
          {
               cout<<"\nBase Show";
          }
};

class Derived_ : public Base_
{
     public:
          void show()
          {    
              cout<<"Derived Show"<<endl;
          }     
};

int main()
{
     Base_ b;
     Derived_ d;
     b->show(); 
     d.show();
}

最佳答案

这在 C++ 中称为“名称隐藏”。本质上,如果一个类定义了一个函数,它就会对父类隐藏所有同名的函数。同样值得注意的是,如果您有一个派生对象的 Base_* 并调用该函数,它将调用基类版本,因为它不是虚拟的,并且不会尝试在派生类中找到重写的实现.

关于c++ - 静态多态性中的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655484/

相关文章:

c++ - 为什么 valgrind 说基本的 SDL 程序正在泄漏内存?

c++ - std::map、多态和删除

c++ - 二进制操作数无效 ^

c++ - 如何使用C++和Boost库生成JSON

C++ 将大型数组中的最新值存储在单独的数组中

c++ - Bruce Eckel 的 Thinking in C++ 中指向成员的指针

c++ - 如何修复由多态性引起的错误?

java - 我似乎不太理解 super() 关键字及其用法

java - 如何在 Java 中使用数组进行类型泛型?

c++ - 无法使用 BaseClass 的 shared_ptr 访问派生类的成员