Не знаю, насколько странным этот вопрос может быть для вас: почему этот код печатает 6 вместо 5? насколько я знаю, следует использовать обычную арифметику здесь, так как когда-то я не перегрузил +
оператора и 2+3 = 3+2 = 5
(насколько я знаю)Почему этот код печатает 6 вместо 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
, он работал. Поэтому я начал писать короткую версию своего кода, чтобы публиковать здесь информацию о ОС и просить о помощи, но теперь я нашел эту проблему. Что мне не хватает?
Конструктор Baa() обращается к конструктору Foo() с установленным флагом A_B. Вам не кажется? Поэтому он добавляет y + y; – user3329166