c++ - 虚函数

标签 c++

class a
{
 virtual void foo(void) ;
};

class b : public  a
{
public:
 virtual void foo(void)
  {
  cout<< "class b";
  }
};

int main ( ) 
{
class a *b_ptr = new b ;
b_ptr->foo();
}

请指导我为什么 b_ptr->foo() 不会调用类 b 的 foo() 函数?

最佳答案

在您编写代码时,由于访问控制违规,它无法编译。由于 b_ptr 实际上是 a * 类型并且 a::foo 是私有(private)的,编译器不允许这样做。

但是将 a::foo 公开,这样就可以正确调用 b::foo

还有一个问题是你没有定义a::foo 所以你的程序不会链接。您需要定义它或使其成为纯虚拟的(即 virtual void foo(void) = 0;)。

关于c++ - 虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2466946/

相关文章:

C++ 指针 - 常见做法

c++ - 调用构造函数而不创建对象

C++ 构造函数

c++ - 仅在库 cpp 中具有定义的前向声明结构

c++ - 无法检索静态 char * 数组

c++ - QLayout 和 QWidget 之间的转换

c++ - 我的 C++ 程序不会从命令行读取多个文件

c++ - 我继续在函数中从另一个数组修改的数组中获取垃圾值

c++ - lambda 的默认捕获是什么?

php - C++按字符串调用函数,与PHP性能对比,C++如何优化代码?