c++ - 为什么这段代码打印的是 6 而不是 5?

标签 c++ clang add

我不知道这个问题对您来说可能有多奇怪:为什么这段代码打印的是 6 而不是 5?据我所知,应该在这里使用通常的算术,因为一旦我没有重载 + 运算符和 2+3 = 3+2 = 5 (据我所知)

#include <stdio.h>
#include <stdlib.h>

enum A
{
    A_A,
    A_B
};

struct Foo
{
    Foo(int, int, enum A);
    int x;
    int y;
    enum A flags;
};

struct Baa : Foo
{
    Baa(int, int);
    void show();
};


Foo::Foo(int a, int b, enum A aflags)
{
    x = a;
    y = b;
    flags = aflags;
}

Baa::Baa(int c, int d)
    : Foo(c, d, A_B)
{
}

void Baa::show()
{
    if(flags == A_A)
        printf("a = [%d]\n", x + y);
    else if(flags == A_B)
        printf("b = [%d]\n", y + y);
    else
        puts("unknow flag");
}

int main()
{
    Baa *b = new Baa(2, 3);
    b->show();
}

输出:

b = [6]

我在访问派生类的成员值时遇到了另一个问题——如果您想知道的话,我得到的是 0 而不是实际值,因此要获得实际值,我需要将其转换为派生类的类型,例如 int x = ((BaseCLass*)this)->n 并且它有效。因此,我开始编写我的代码的简短版本以在操作系统上发布并寻求帮助,但现在我发现了这个问题。我错过了什么?

最佳答案

printf("b = [%d]\n", y + y);

你不是想成为 x+y 而不是 y+y 吗?所以,3+3 是 6,这是正确的。

关于c++ - 为什么这段代码打印的是 6 而不是 5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22258223/

相关文章:

c++ - 是否可以创建一个容器,其对象只占用 2 位?

c++ - 程序编译错误

c++ - 将 Objective-C 应用程序链接到 C++ 静态库

unicode - llvm-clang;包含 unicode 字符的函数/变量名称

cmake - 带有 cmake add_definitions 的文件路径

c++ - 无法获取 "stack"以填充基于 DFS 的任务排序程序

c++ - 返回对齐结构后出现段错误

fonts - 如何在fpdf中添加新字体?

visual-studio - 如何使用 AnkhSVN 将 VS2010 项目添加到 Google Code SVN?

c++ - 枚举有问题