zoukankan      html  css  js  c++  java
  • c/c++ 继承与多态 继承时如何改变个别成员的访问属性

    问题1:若类B以private的方式继承类A,但还想让类A的某些个别成员,保持public或者protected的访问属性,这时应该怎么办?

    使用using,去改变访问属性。

    #include <cstddef>//std::size_t
    
    class Base{
    public:
      std::size_t size() const {
        return n;
      }
      void f() const {
        
      }
    protected:
      std::size_t n = 0;
      int j = 0;
    };
    
    class D : private Base{
    public:
      using Base::size;
    protected:
      using Base::n;
    };
    
    class DD : public D{
      void g(){
        std::size_t t = n;
        //int tj = j;//error
      }
    };
    
    int main(){
      D d;
      d.size();
      //d.f();//error
      
    }
    

    github

    分析:

    类D私有继承类Base,如果没有用using的话,类D里包含的所有Base类的成员都会变为private,所以类D的子类DD的成员函数无法访问j,但是可以访问n;所以类D的用户代码,可以访问size()方法,但是不可以访问f()方法。

    问题2:如果继承时,没有指明以哪种方式,那么是以何种方式继承的呢?

    class的话,是private继承;

    struct的话,是public继承。

    c/c++ 学习互助QQ群:877684253

    本人微信:xiaoshitou5854

  • 相关阅读:
    noexcept(c++11)
    右值引用和std::move函数(c++11)
    mint-ui 取值
    apicloud 注意事项
    倒计时
    获取第n天日期
    防止split没有切割的变量报错
    return
    时间戳转为日期
    echarts 中 请求后台改变数据
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/10208953.html
Copyright © 2011-2022 走看看