我有一个基类 A 和派生类 B
B 类从 A 派生为 public
如果A 是类 a 是成员变量,我想访问成员变量的地址
当我使用受保护和公共访问说明符时,我观察到不同的行为。
在这种情况下,当 A 类的成员 a受到保护时,我得到:
cout<<&A::a << endl;
给我一个编译器错误..
但cout<<&(A::a)<<endl;
有效并给我正确的结果。
在这种情况下,当 A 类的成员 a 是公开的时,我得到:
为什么会有这种行为?
这是完整的代码:
#include <iostream>
using namespace std;
class A
{
protected:
int a;
void fun()
{
cout<<"A's fun"<<endl;
}
public:
A(int Aarg):a(Aarg)
{
cout << "A's construction done" <<endl;
}
};
class B: public A
{
protected:
int b;
public:
void fun()
{
cout << "B's fun"<<endl;
}
B(int As, int Bs):A(As), b(Bs)
{
std::cout<<"B's 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;
}
现在我可以观察到一个未定义的行为:
如果我将 A 类中的成员变量 a 设为 public,则不会出现任何编译错误,但输出为 1,我不知道为什么..
class A{
public:
int a
....
....
输出:
A的建设完成
B的建设完成
A很有趣
0027F91C
1(为什么是 1)并且当我尝试访问受保护的成员时没有出现错误?