zoukankan      html  css  js  c++  java
  • C++ 多重继承

      大多数应用程序使用单个基类的公用继承,但是在某些情况下,单继承是不够的,必须使用多继承,当然多继承也会带来很多的麻烦,下面列出了多继承的一些要点和注意事项。

      1.基类的构造函数与按照派生类列表中出现的次序调用,析构函数的调用次序总是和构造函数的调用次序相反。

      2.多重继承的情况下,遇到二义性的可能将会更大,编译器不会试图根据派生类转换区别基类间的转换,转换成每个基类都一样好,有如下代码:

    class ZooAnimal
    {

    };

    class Bear : public ZooAnimal
    {

    };

    class Endangered
    {

    };

    class Panda : public Bear, public Endangered
    {

    };

    如果有print函数的两个重载版本:

    void print(const Bear&);

    void print(const Endangered&);

    这个调用将会出错,编译器将指出改掉用有二义性。

      3.假定在类的多个基类中定义了相同的成员,将会导致二义性,如果定义了同名的成员函数,即使是函数参数不同,也会导致二义性,代码如下:

    class ZooAnimal
    {

    };

    class Bear : public ZooAnimal
    {
    public:
    void print(int x){cout<<"print"<<endl;}

    };

    class Endangered
    {
    public:
    void print(){cout<<"print"<<endl;};
    };

    class Panda : public Bear, public Endangered
    {
    };

    如果在ZooAnimal中定义了print 而Bear中没有定义,同样会出现二义性。避免二义性的最好方法就是指定函数的作用域,比如:

    Bear::print(x);

  • 相关阅读:
    Spring AOP总结(三)
    Spring AOP源码解析(二)
    java9新特性
    BeanFactory和ApplicationContext的区别总结
    Elasticsearch7.X为什么移除类型(type)
    elasticsearch性能优化(二)
    elasticsearch性能优化(一)
    elasticsearch的master选举机制
    自动化构建和部署应用系统平台
    关系型数据库之mysql-01
  • 原文地址:https://www.cnblogs.com/lzmfywz/p/2991875.html
Copyright © 2011-2022 走看看