Представленный код недопустим, поскольку Bar
- это имя класса, а не переменной.
Однако следующее:
struct Foo {}
struct Bar : Foo {}
Bar fooBar;
Foo &foo = fooBar; // without ()
Это законно, потому что Bar
- это Foo
, поэтому вы просто даете другое имя своей переменной fooBar
.
Обратите внимание, что foo
, хотя псевдоним для fooBar
, будет интерпретировать местоположение как Foo
объект.
Это означает следующее:
struct Foo { int x; }; //note semicolons after struct declaration
struct Bar : Foo { int y; };
Bar fooBar;
fooBar.y = 2;
fooBar.x = 3;
Foo &foo = fooBar;
int aux;
aux = foo.x; // aux == 3
aux = foo.y; // compile error