我不知道这个问题对您来说可能有多奇怪:为什么这段代码打印的是 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/