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

  • 相关阅读:
    poj 2104(线段树)
    poj 1962(并查集+带权更新)
    hdu 2818(并查集,带权更新)
    hdu 1856
    hdu 3172
    hdu 1325(并查集)
    hdu 5023
    pku 2777(经典线段树染色问题)
    hdu 1671(字典树判断前缀)
    hdu 1247 (字典树入门)
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/10208953.html
Copyright © 2011-2022 走看看