为什么可以从派生类访问私有成员(取消基类的成员 fxns)
Why are private members accessible from derived class (unsing member fxns of base class)
这是我的c ++程序,der
继承自base
。
#include <iostream.h>
#include <conio.h>
class base
{
int x;
public:
int y;
void set(int a,int b)
{
x=a;
y=b;
}
void show()
{
cout<<"X ="<<x;
}
};
class der:public base
{
int i;
};
void main()
{
clrscr();
int p,q;
base o1;
der o2;
o2.y=10;
o2.x=20;
q=sizeof(o2);
p=sizeof(o1);
cout<<"Size of Abc "<<p;
cout<<"nSize of Der "<<q;
getch();
}
因为我们知道私有成员不是继承的,但是当我找到 o1
的大小时,它给出了 4(明显的 2 个 int 成员(,但是 o2
的大小是 6,但如果private
不是继承的,应该是 4。任何人都可以在这里帮忙。
还有一件事,因为我能够公开成员 fxns 的基础,这反过来可以访问私有数据成员,所以我们可以说私人成员也可以在类外访问
"我们知道私人成员不是继承的">
这根本不是真的。 私有成员是继承的,但派生类无法访问它们。 所以它们的存储仍然存在 - 否则基类也无法使用自己的成员(回想一下,派生类对象"是"基类对象,只是添加了更多内容(。
所有非静态成员都继承到派生类。
AND 派生类可以访问所有成员。
可以访问Public
和Protected
成员directly
并且可以Private
成员在继承成员functions
的帮助下或通过pointer
访问indirectly
。
相关文章:
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 如何访问对象的成员变量的取消引用值
- C++14 对私有成员进行单元测试(取消)分配
- 如何使用 QPoint 指针成员对类进行排队和取消排队
- ASYNC_WAIT处理程序班级成员具有取消处理
- 为什么INVOKE总是取消引用数据成员,而不是在可能的情况下调用
- 在取消引用的对象指针上调用成员函数
- 取消引用结构以获取第一个成员的值
- 取消成员指针
- 如何获取函数返回类型的模板成员的取消引用类型
- 关于智能指针中取消引用和成员选择运算符的定义
- 类成员向量上的迭代器未正确取消引用
- 取消引用指向联盟成员的指针
- 为什么在取消引用结构后结构成员未初始化
- 取消引用成员指针
- 如果 Derived 没有向 Base 添加新成员(并且是 POD),则可以安全地完成哪种指针强制转换和取消引用
- 在 std::vector 成员中取消分配数组
- 取消引用向上转换的成员函数指针
- 我真的必须取消移动构造函数/移动结构中的所有成员还是只是指针
- 为什么可以从派生类访问私有成员(取消基类的成员 fxns)