`
kmplayer
  • 浏览: 508713 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

虚基类和多重继承总结

阅读更多
1,虚基类,其构造函数总是在最后一个层次最先并且真正被执行。
实例代码:
#include <iostream>
using namespace std;

class A
{
public:
    A(const string& s)
    {
        cout << "A " << s << endl;
    }
    virtual ~A() {}
};

class B
{
public:
    B(const string& s)
    {
        cout << "B " << s << endl;
    }
    virtual ~B() {}
};

class C
{
public:
    C(const string& s)
    {
        cout << "C " << s << endl;
    }
    virtual ~C() {}
};

class D
{
public:
    D(const string& s)
    {
        cout << "D " << s << endl;
    }
    virtual ~D() {}
};

class E : public A, virtual public B, virtual public C
{
public:
    E(const string& s) : A("from E"), B("from E"), C("from E")
    {
        cout << "E " << s << endl;
    }
};

class F : virtual public B, virtual public C, public D
{
public:
    F(const string& s) : B("from F"), C("from F"), D("from F")
    {
        cout << "F " << s << endl;
    }
};

class G : public E, public F
{
public:
    G(const string& s) : B("from G"), C("from G"), E("from G"),  F("from G")
    {
        cout << "G " << s << endl;
    }
};

int main()
{
    //虚基类的构造函数最先执行
    G g("from main");
}


输出:
引用
B from G
C from G
A from E
E from G
D from F
F from G
G from main


总结:虚基类构造函数最先被执行,然后按照从左到右,从上到下的顺序依次执行每一个构造函数。
分享到:
评论

相关推荐

    虚基类的使用实例

    - `level1` 和 `level2` 类分别继承自 `base1` 和 `base2`,其中 `level1` 和 `level2` 都使用了虚继承的方式继承 `base1`,以避免多重继承带来的基类成员重复问题。 - `toplevel` 类继承自 `level1` 和 `level2`...

    多继承和虚基类PPT

    本资源总结了C++中的多继承和虚基类的概念和应用。多继承是指一个派生类可以继承多个基类的成员,包括数据成员和函数成员。虚基类是解决多继承中出现的命名冲突和继承路径复杂性的机制。 多继承 多继承是指一个...

    vs2008 多重继承虚基类的简单应用

    在C++编程中,多重继承和虚基类是两种重要的特性,它们允许一个类可以从多个父类中继承属性和行为。Visual Studio 2008(VS2008)作为一个强大的开发环境,支持这些高级的面向对象特性,使得开发者能够创建复杂的...

    多重继承--虚基类工程代码

    且构造函数和析构函数的调用顺序和单继承是一样的,先调用基类构造函数,再调用对象成员的构造函数,最后调用派生类的构造函数。那么处于同一层次的各个基类构造函数的调用顺序是取决于声明派生类时所指定的各个基类...

    C++ 虚基类 继承 多态示例

    在C++中,虚基类的目的是解决多重继承中的菱形问题。当一个类从两个或更多具有共同基类的类继承时,如果没有使用虚基类,那么基类的实例会被每个派生类复制一次,可能导致数据冗余。通过声明基类为虚基类(using `...

    数据结构 C++ 虚函数与虚基类 5个.rar

    在多重继承中,如果没有使用虚基类,可能会导致“菱形问题”——一个派生类有多个相同的基类实例,从而占用额外的内存并可能导致行为混乱。虚基类解决了这个问题,确保只有一个基类的实例。声明虚基类的语法是在继承...

    继承派生虚基类.rar

    在这个“继承派生虚基类.rar”实验中,我们将探讨C++中的继承机制,特别是虚基类的使用,以及如何处理多继承和连续继承的情况。这个实验涉及到了大学计算机科学课程中常见的主题,对于理解和掌握C++的面向对象特性至...

    类的继承第二次作业(多重继承与虚基类)参考答案_C++_teacher_

    定义一个Person 类,结构如下图,为该类添加输入输出流运算符重载。Person 类以Public方式派生出一个Teacher类,数据成员包括:int gh(工号);char* title(职称),为该类添加输入输出流运算符重载,完成有参、无参、...

    C++编程思想--多重继承

    多重继承是C++中的一种特性,允许一个类可以从多个基类中继承属性和行为,从而实现代码复用和设计灵活性。这种机制使得类能够结合多个基类的功能,但同时也引入了一些复杂性和潜在的问题。 1. **子对象重叠** 当一...

    虚基类、虚函数与纯虚函数

    总之,虚基类、虚函数和纯虚函数是C++中实现面向对象编程的关键特性,它们分别用于解决多重继承的二义性、实现运行时多态以及强制派生类提供特定功能的实现。理解并掌握这些概念对于编写高效、可扩展的C++程序至关...

    多重继承和虚继承.doc

    多重继承和虚继承是C++中两种高级的继承方式,它们允许类从多个基类中获取属性和行为,但同时也引入了一些复杂性和潜在的问题。 **多重继承** 是指一个类可以从多个基类派生,从而获得多个基类的特性。在多重继承中...

    C++虚拟多重继承对象模型讨论-样例

    在实际编程中,虚拟多重继承可以增加代码的灵活性,但也会带来额外的开销,包括内存消耗(由于虚基类表的存在)和运行时性能影响(由于虚函数调用和虚基类的处理)。因此,虽然C++支持虚拟多重继承,但在设计类层次...

    实现C++类的多重继承

    在C++编程语言中,多重继承是一种特性,允许一个派生类从多个基类继承属性和...正确理解和运用虚基类、访问控制以及多态性,是有效利用多重继承的关键。在实践中,我们需要根据具体需求权衡利弊,合理选择继承策略。

    多重继承(6_7钻石继承问题)_C++_

    在C++编程语言中,多重继承是一个特性,允许一个类(子类)继承自多个基类(父类)。这种设计模式使得子类可以同时获得多个基类的特性,增加了代码的复用性。然而,多重继承也带来了一些复杂性和潜在的问题,其中最...

    实例讲解C++编程中的虚函数与虚基类

    在C++编程中,虚函数(Virtual Function)和虚基类(Virtual ...虚基类则主要用于解决多重继承中的二义性问题,确保基类的唯一实例。理解并熟练运用这些概念,将有助于提升C++编程能力,编写出更加高效和可维护的代码。

    C++继承,虚函数与多态性专题

    同名变量和函数问题,最后介绍了多重继承与虚基类。本文第二部分重点介绍了虚函数与多态性的问题,因此学习虚函 数的基础是继承,因此在学习虚函数前应学好继承。本文详细易懂,内容全面,是学习C++的不错的资料。

    干部教师基类多重继承作业.exe

    #include #include using namespace std; class Teacher{ public: Teacher(string nam,int a,char s,string tit,string ad,string t):name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){} void display();...

    第4章继承和多重继承.ppt

    继承和多重继承 继承是面向对象编程(OOP)中的一种机制,允许一个类继承另一个类的所有成员变量和成员函数。继承可以实现代码的重用和扩展,提高编程效率和代码的可维护性。 一、继承的概念 继承是从已定义的类...

    实现c++类的多重继承的例程

    在C++编程语言中,多重继承是一种特性,允许一个派生类从多个基类中继承属性和行为。这种设计模式增强了代码的复用性,并且能够构建复杂的类层次结构。以下是一个关于如何实现C++类的多重继承的详细解释。 首先,让...

Global site tag (gtag.js) - Google Analytics