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);

  • 相关阅读:
    vue中点击输入框弹出事件
    shiro
    Java转Kotlin
    RxJava2详细攻略(四)
    RxJava2详细攻略(三)
    RxJava2详细攻略(二)
    RxJava2详细攻略(一)
    DataBinding使用介绍
    类集框架
    使用CrashHandler获取应用crash信息
  • 原文地址:https://www.cnblogs.com/lzmfywz/p/2991875.html
Copyright © 2011-2022 走看看