C++ 覆盖基本成员值

标签 c++ class inheritance radix derived

<分区>

我有以下代码:

class A
{
public:
    int foo = 0;
};

class B: public A
{
public:
    int foo = 1;
};

int main()
{
    A *a = new B();

    std::cout << a->foo;
    std::getchar();

    return 0;
}

输出:0

为什么 B 不覆盖 A 的成员 foo ?

以及如何在不转换为派生类的情况下获得所需的 1 输出

最佳答案

您只能覆盖 虚拟 成员函数。
所有其他成员,无论是函数、类型还是成员变量,都只能被隐藏

这意味着它们根本没有改变,但如果不引用适当的基数、使用范围解析运算符等就不容易访问。

因此,改为使用虚函数而不是成员变量。

关于C++ 覆盖基本成员值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686319/

相关文章:

Java 改变不同类的 GUI

c++ - 不在基类和派生类中调用虚拟析构函数

c++ - boost.Python 如何公开 boost::shared_ptr 的 typedef?

c++ - wxWidgets 显示来自 8 位数组的位图

c++ - 在 C++ 中将值复制到结构成员和从成员复制值

java - 类声明,通过它可以与任何类型的数据进行交互

c++ - 有没有办法为模板化函数声明类型名?

class - 编程笔记软件

javascript - 使用 javascript 原型(prototype)继承

python - 从子类 __init__() 内部初始化父类是否可以接受?