回 帖 发 新 帖 刷新版面

主题:改错

#include <iostream.h>
class X{
public:
    X(int x)
    {a=x;}
   
    void showX( )
    {cout<<"a="<<a<<endl;}
private:
    int a;
};
class Y: private X{
public:
    Y(int x,int y):X(x)
    {b=y;}
    void showY( )
    { showX();
    cout<<"b="<<b<<endl;
    }
private:
    int b;
};

class Z: public Y{
public:
    Z(int x, int y,int z):Y(x,y)
    { c=z; }
    void showZ( );
private:
    int c;
};
void Z::showZ()
{showY();
    cout<<"c="<<c<<endl;
    };
int main( )
{
Z obj(10, 20, 30);    
obj.showX( );
obj.showY( );    
obj.showZ( );   
return 0;
}


要求: Y是X的私有继承,Z是Y的公有继承
    输出    a=10
        a=10
        b=20
        a=10
        b=20
        c=30
多谢

回复列表 (共2个回复)

沙发

上程序中class y私有继承class X后void showX( )函数变成了class Y的私有成员,classZ继承class Y后并不能访问class Y的私有成员,而你在
int main( )
{
Z obj(10, 20, 30);    
[color=FF0000]obj.showX( );[/color]
obj.showY( );    
obj.showZ( );   
return 0;
}中企图调用class Y的私有成员这是不允许的。因为类中的私有成员在公共、私有、保护派生类中都是不可访问的,所以产生函数调用错误。鄙人强烈建议你去看一下各种继承成员访问规则。

板凳


这是一道改错题  谢谢 

我来回复

您尚未登录,请登录后再回复。点此登录或注册