这个c++问题该怎么解决

若类Y是类X的私有派生类,类Z是类Y的公用派生类,则类Z能不能访问类X的公用成员和保护成员。

不能 只要私有继承就所有都不能访问

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7403299
  • 你也可以参考下这篇文章:[c++]输入三个整数x,y,z,求这三个数最小值
  • 除此之外, 这篇博客: C++详解汉诺塔,你不懂算我输中的 1.我要将最底层的移到z,那么上面的盘子肯定都要移到y,就像这样: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述
    ##2.这一步自然而然的就是将最底层的移到z
    在这里插入图片描述
    ##3.那么仔细思考,这和刚开始的图有什么区别?(如果你能看到无非是最大牌子到z了(我们移动其他牌子更不受大盘子的影响),其他的只是所在柱上的名字改了,那么恭喜你接近递归的本质了,你也应该想出第三步了。)就是将y上的牌子移到z。
    给你一副图:(和第一幅图对比,这就是汉诺它可以写成递归的原因)
    在这里插入图片描述
    你理解了这些,你就非常容易理解我的源码了:

    #include <iostream>
    using namespace std;
    //函数名?
    //函数值返回类型?
    //弹栈条件是什么?  return?
    //怎样调用递归函数?
    void move(int n,char x,char z){
        cout<<n<<" "<<x<<": move "<<z<<endl;
    }
    void Hanoi(int n,char x,char y,char z){
        if(n==1){
            move(n,x,z);
                return ;
        }
        Hanoi(n-1,x,z,y);
        move(n,x,z);
        Hanoi(n-1,y,x,z);
    }
    int main(){
        char x='x',y='y',z='z';
        int n;
        cin>>n;
        Hanoi(n,x,y,z);//将三个牌子经y有x-->z
        system("pause");
    }
    

    #附上运行结果:
    在这里插入图片描述
    在这里插入图片描述
    想了解更多精彩内容,请关注我

  • 以下回答由chatgpt基于相关博客总结生成:

    对于类的继承关系,C++中使用关键词来实现,例如将Y类定义为X类的私有派生类,则可以使用如下语法:

    class Y : private X { //Y的定义 };

    同样的,将Z类定义为Y类的公用派生类,则可以使用如下语法:

    class Z : public Y { //Z的定义 };

    这样定义之后,Z类可以访问Y类的公用成员和保护成员,但无法直接访问X类的成员。如果需要访问X类的成员,需要在Y类中添加公用或保护的成员函数来进行访问,例如:

    class Y : private X { public: using X::some_public_member; //将X类的公用成员some_public_member设置为Y类的公用成员 protected: using X::some_protected_member; //将X类的保护成员some_protected_member设置为Y类的保护成员 };

    class Z : public Y { public: void access_members_of_X() { some_public_member(); //可以访问Y类的公用成员和保护成员 some_protected_member(); } };

    这样,在Z类的成员函数access_members_of_X中就可以访问X类的公用成员和保护成员了。