为什么此代码打印6而不是5
Why does this code print 6 instead of 5?
我不知道这个问题对您有多奇怪:为什么此代码打印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
且奏效。因此,我开始写一个简短的代码版本以在OS上发布并寻求帮助,但现在我发现了这个问题。我想念什么?
printf("b = [%d]n", y + y);
您不是说是x+y
而不是y+y
吗?因此,3 3是正确的。
您正在用:
创建Baa
对象 Baa *b = new Baa(2, 3);
接下来发生的事情是:
Baa::Baa(int c, int d)
: Foo(c, d, A_B) // < flag A_B !
{
}
,它的作用是:
Foo::Foo(int a, int b, enum A aflags)
{
x = a;
y = b;
flags = aflags;
}
然后在show
方法中您要做:
else if(flags == A_B)
printf("b = [%d]n", y + y);
和y y = 3 3 = 6。混淆在哪里?
旁注: delete b;
?
在我看来,关键行是:
else if(flags == A_B)
printf("b = [%d]n", y + y);
Baa
构造函数将flags
设置为A_B
。因此,show()
将输出y + y
,即3 3 = 6。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 如何使代码打印文本文件中的第一行?
- 有没有办法用单行逻辑代码打印金字塔星形图案?面试官向我的朋友问了这个问题
- 为什么我的代码打印右值 2 次而不是右值和左值?
- 为什么我的代码打印错误的密文
- 代码打印出一系列无意义的数字
- 为什么此代码打印字符串而不是打印地址
- 有人可以解释为什么此代码打印4
- 期望:代码打印出x(您键入的)在矩阵中出现的次数.实际:代码打印出值量
- 为什么此代码打印6而不是5
- 为什么此代码打印"olleH"?
- 为什么我的代码打印每个数字
- C++代码打印奇怪的值
- 为什么此代码打印 0
- 如何使用 logcat 以本机代码打印(或转储)包裹
- 我的代码打印出地址而不是数组值
- 为什么此代码打印垃圾
- 为什么这个代码打印出一个4