我正在使用 Win8 VC++2012。
上面的代码是为了说明子类B在任何情况下都不能访问A::a。我也不能更改 A::a 但 A::b 和 A::c 的访问属性。
所以 A::c 不是从 A 继承到 B 的。但是 sizeof(A) 和 sizeof(B) 分别是 12 和 24,也就是说 A::a DO 占用 B 中的内存。
- B 如何将 A::a 存储在它的内存中而永远无法访问它?
- C ++ Primer一书说,我们可以恢复基类成员的访问属性,但不能更改它。这里我的代码显示我可以在 B 中将 A::b 的访问属性从受保护更改为公开。为什么?
这是代码:
#include <iostream>
using namespace std;
class A
{
private:
int a;
protected:
int b;
public:
int c;
A(int a, int b, int c): a(a), b(b), c(c)
{
cout << "A: ";
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
};
class B: protected A
{
private:
int d;
protected:
int e;
//using A::a; COMPILE ERROR
public:
int f;
//A::a; COMPILE ERROR
using A::c; //RESTORE A::c public access
A::b; // change A::b from protected to public
B(int d, int e, int f): A(d, e, f), d(d), e(e), f(f)
{
cout << "B\n";
//cout << a << endl; COMPILE ERROR
cout << b << " ";
cout << c << " ";
cout << d << " ";
cout << e << " ";
cout << f << endl;
}
};
int main()
{
A a(1,2,3);
B b(4,5,6);
cout << "sizeof(A)=" << sizeof(A) << endl; //OUTPUT 12
cout << "sizeof(B)=" << sizeof(B) << endl; //OUTPUT 24
return 0;
}