为什么可以从派生类访问私有成员(取消基类的成员 fxns)

Why are private members accessible from derived class (unsing member fxns of base class)

本文关键字:成员 取消 基类 fxns 派生 访问 为什么      更新时间:2023-10-16

这是我的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 派生类可以访问所有成员。

可以访问PublicProtected成员directly并且可以Private成员在继承成员functions的帮助下或通过pointer访问indirectly