c++ - 了解在堆栈上分配的实例的 C++ 虚拟方法

标签 c++

对于下面的代码:

#include<iostream>
using namespace std;

class A{
public:
virtual int f(){return 1;}
};
class B : public A{
public:
virtual int f(){return 2;}
};
int main(int argc,char*argv[]){
    A b=B();
    cout<<b.f()<<endl;
}

我希望打印出数字 2。相反,程序会打印数字 1

谁能解释这是为什么?

最佳答案

您所做的称为<​​strong>切片。参见What is object slicing?

相反,应该使用指针:

A* b = new B();

关于c++ - 了解在堆栈上分配的实例的 C++ 虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4718468/

相关文章:

c++ - 处理解码时改变的分辨率?

c++ - C++ 类中的引用

c++ - 在 C++ 中解析 argc 和 argv

c++ - const指针专门化可使用MSVC生成未解析的符号,并且适用于GCC/Clang

c++ - 如何在没有 QtCreator 的情况下编译 Qt 5 项目?

c++ - constexpr 定义声明为 const 的文字类型的静态数据成员

c++ - AfxPumpMessage() 用于什么?

c++ - gtkmm 中的程序不会显示按钮

c++ - 什么时候删除对象?创建对象c++的影响

c++ - 为什么逗号表达式用作放置参数时不能按预期工作?