gpt4 book ai didi

c++ - C++ 子类不能从父类继承私有(private)成员?

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:14 25 4
gpt4 key购买 nike

我使用的是Win8 VC++2012

上面的代码是为了说明子类B在任何情况下都不能访问A::a。我也不能更改 A::a 的访问属性,但 A::b 和 A::c。

所以A::c并没有从A继承到B。但是sizeof(A)和sizeof(B)分别是12和24,也就是说A::a在B中DO占用了内存。

  1. B 如何将 A::a 存储在它的内存中而永远无法访问它?
  2. C++ Primer 一书说,我们可以恢复基类成员的访问属性,但不能更改它。这里我的代码显示我可以在 B 中将 A::b 的访问属性从 protected 更改为 public。为什么?

代码如下:

#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;
}

最佳答案

子级继承了父级的私有(private)成员,但他们不能访问它们。访问使它们 protected

class A
{
protected: // <<------------ make `a` as protected in parent
int a;

关于c++ - C++ 子类不能从父类继承私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com