У меня есть базовый класс A и производный класс B
класс B получен из A как общедоступный
Я хочу получить доступ к адресу переменной-члена, если A является классом a является переменной-членом
Я наблюдаю за другим поведением, когда я пользуюсь защищенным и общедоступным спецификатором доступа.
Когда член a класса A защищен, в этом случае я получаю:
cout<<&A::a << endl;
бросает мне ошибку компилятора..
но cout<<&(A::a)<<endl;
является допустимым и дает правильный результат.
и Когда член a класса A public, в этом случае я получаю:
Зачем это поведение?
Вот полный код:
#include <iostream>
using namespace std;
class A
{
protected:
int a;
void fun()
{
cout<<"A fun"<<endl;
}
public:
A(int Aarg):a(Aarg)
{
cout << "A construction done" <<endl;
}
};
class B: public A
{
protected:
int b;
public:
void fun()
{
cout << "B fun"<<endl;
}
B(int As, int Bs):A(As), b(Bs)
{
std::cout<<"B Construction Done" <<std::endl;
}
void show()
{
A::fun();
//cout << a << endl;
cout<<&A::a << endl; //compilation error
}
};
int main()
{
B(10,20).show();
return 0;
}
Теперь существует поведение undefined, которое я могу наблюдать:
Если я сделаю свою переменную-член a в классе A общедоступной, тогда не будет какой-либо ошибки компиляции, но вывод идет как 1, я не знаю, почему..
class A{
public:
int a
....
....
ВЫВОД:
Сделанная конструкция
B Выполненная конструкция
Веселье
0027F91C
1 (почему 1) и никаких ошибок, которые я смог получить, когда пытался получить доступ к защищенному члену?