zoukankan      html  css  js  c++  java
  • C++_代码重用3-私有继承

    使用包含:易于理解,类声明中包含表示被包含类的显式命名对象,代码可以通过名称引用这些对象;

    使用继承:将使关系更抽象,且继承会引起很多问题,尤其是从多个基类继承时。

     

    私有继承所提供的特性确实比包含多。

    通常,应使用包含来建立has-a关系;如果新类需要访问原有类的保护成员,或需要重新定义虚函数,则应使用私有继承。

    保护继承

    保护继承:基类的公有成员和保护成员都将成为派生类的保护成员。

    私有继承与保护继承的区别,在第三代继承中就体现出来了。使用私有继承时,第三代类不能使用基类的接口;使用保护继承时,基类的公有方法在第二代中将变成受保护的,因此第三代派生类可以使用它们。

    使用using重新定义访问权限

    (在继承提供了一种机制来对基类公有方法的访问权限的控制,属性的改变):使用保护派生或私有派生时,基类的公有成员将成为保护成员或私有成员。

           假设要让基类的方法在派生类中可用,可以有两种方法:

    1) 定义一个使用该基类方法的派生类方法:

     

    2) 将函数调用包装在另一个函数调用中:

    在类声明中使用using;

    class Student:private std::string, private std::valarray<double>

    {

    public:

            using std::valarray<double>::min;

            using std::valarray<double>::max;

    }

     

    using声明使得valarray类的min,max方法可用,就像是Student类的公有方法一样;

    而且注意使用using声明时,只使用成员名,没有圆括号,函数特征标,返回类型。

    Using声明只适用于继承,而不适用与包含。

  • 相关阅读:
    linux中公钥和私钥的区别以及关系
    PAM
    57 容器(十一)——Collections容器工具类
    56 容器(十)——Iterator迭代器遍历容器
    55 重载需要注意的地方
    54 容器(九)——HashSet
    53 容器(八)——TreeMap 红黑树
    52 权限修饰符
    51 方法重写需要注意的地方
    50 多态,为什么总是要用父类引用指向子类对象?
  • 原文地址:https://www.cnblogs.com/grooovvve/p/10422239.html
Copyright © 2011-2022 走看看