继承与包含中构造与析构的执行顺序

 

   [HP笔试题目]

    一个类A继承类B并且包含C,B中包含D。在构造A的时候,先构造B中的D,再构造B,然后构造A中的C,最后构造A。虚构的过程刚好相反。例子如下:|

    #include<iostream.h>

class IDCart{

public:

         IDCart()

         {

                   cout<<"IDCart construstor"<<endl;

         }

         ~IDCart()

         {

                   cout<<"IDCart destrustor"<<endl;

         }

};

class person{

public:

         person()

         {

                   cout<<"person contrustor"<<endl;

         }

         ~person()

         {

                   cout<<"person destrustor"<<endl;

         }

private:

         IDCart id;

};

 

class subject{

public:

         subject()

         {

           cout<<"subject construstor"<<endl;

         }

         ~subject()

         {

           cout<<"subject destrustor"<<endl;

         }

};

 

class teacher:public person{

public:

          teacher()

          {

                    cout<<"teacher construstor"<<endl;

          }

          ~teacher()

          {

                    cout<<"teacher destrustor"<<endl;

          }

private:

         subject sub;

};

 

void main()

{

         teacher tea;

}

 

运行的结果如下:

IDCart construstor

person contrustor

subject construstor

teacher construstor

teacher destrustor

subject destrustor

person destrustor

IDCart destrustor

 

时间: 2024-10-09 06:09:21

继承与包含中构造与析构的执行顺序的相关文章

SQL Server 查询处理中的各个阶段(SQL执行顺序)示例_MsSql

在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理. 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入.这些虚拟表对调用者(客户端应用程序或者外部查询)不可用.只是最后一步生成的表才会返回 给调用者.如果没有在查询中指定某一子句,将跳过相应的步骤.下面是对应用于SQL server 2000和SQL Server 2005的各个逻辑步骤的简单描述. 复制代码 代码如下: (8)SELECT

java中finally和return的执行顺序

注意:return的位置... 从这几个例子中可以看到,如果try之前没有有条件的return,则try..catch..finally语句块中的语句都是顺序执行(如果try中或者catch中 有return语句,那么先执行该return,然后执行finally, 如果finally中也有return, 该出的返回值会覆盖掉try 和 catch中的return值: 如果try..catch..finally语句块之后有return语句, try中.catch中.finally中都没有 (有条件

数据库中的SELECT语句逻辑执行顺序分析_Mysql

引言 这不是一个什么多深的技术问题,多么牛叉的编程能力.这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助.它不是一个复杂的知识点,但是一个非常基础的SQL根基.不了解这些,你一直用普通水泥盖房子:掌握这些,你是在用高等水泥盖房子. 然而,就是这么一个小小的知识点,大家可以去调查一下周围的同事朋友,没准你会得到一个"惊喜". 由于这篇文章是突然有感而写,下面随手编写的SQL语句没有经过测试. 看下面的几段SQL语句: 复制代码 代码

(多)继承中的构造与析构

(多)继承中的构造与析构 问:析构函数为何定义为虚函数较好? 答:若不这样,基类指针指向子类,再删除该指针时,子类的析构函数得不到调用,子类中比父类多的那些变量得不到回收,造成内存泄露.

C++中派生类的构造和析构顺序详解

派生类因为要调用基类, 所以构造和析构都是按照一定顺序进行; 构造的顺序是: 基(base) -> 派生(derived);即先构造基类, 再构造派生类; 因为 基类 是独立于派生类的, 即不会调用派生类中的对象, 所以应该先被生成; 如果派生类先于基类生成, 则因为无法调用基类资源, 可能生成失败; 析构的顺序是: 派生(derived) -> 基(base); 即先释放派生类, 再释放基类; 因为 派生类 需要先释放调用的基类资源, 所以应该优先释放; 如果基类先析构, 则有可能某些资源被

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable  成员函数 Fushu.h #pragma once #include <iostream> class fushu { public: int x; int y; public: fushu(); ~fushu(); void show(); inline void showall(int x, int y);//显式内联 void setxy(int x, int y);//编译器优化,默认隐式内联 void show(int x, int y);

Python类方法__init__和__del__构造、析构过程分析_python

最近学习<Python参考手册>学到Class部分,遇到了类的构造析构部分的问题: 1.什么时候构造? 2.什么时候析构? 3.成员变量如何处理? 4.Python中的共享成员函数如何访问? ------------------------ 探索过程: 1.经过查找,Python中没有专用的构造和析构函数,但是一般可以在__init__和__del__分别完成初始化和删除操作,可用这个替代构造和析构.还有一个__new__用来定制类的创建过程,不过需要一定的配置,此处不做讨论. 2.类的成员函

由始至终----构造与析构(转转)

由始至终                         ----构造与析构作者:HolyFire我们在平时的生活中一般会总结出一些规律,早上起床会刷牙洗脸,晚上会洗澡睡觉,这些都成了惯例.使用瓶装调味品时先将瓶盖打开,用完后将瓶盖盖上.这是一种好习惯.但是有些人不同,他们往往偷懒,一个常常不刷牙不洗脸不洗澡的人会有体味,东西放得乱七八糟的人生房间很不整洁.这些都是我们不希望看到的.当然编程中我们也不希望代码乱七八糟.使用一个未初始化的变量简直就是灾难,使用一个未初始化的指针将导致崩溃.这是我的

详解js中构造流程图的核心技术JsPlumb(2)_javascript技巧

前言:上篇详解js中构造流程图的核心技术JsPlumb介绍了下JsPlumb在浏览器里面画流程图的效果展示,以及简单的JsPlumb代码示例.这篇还是接着来看看各个效果的代码说明. 一.设置连线的样式和颜色效果代码示例 大概的效果如图: 这些效果看着很简单,那么,我们如何用代码去实现它呢.上章我们说过,JsPlumb的连线样式是由点的某些属性决定的,既然如此,我们就通过设置点的样式来动态改变连线的样式即可.来看代码: 首先来看看连线类型的那个select <div id="btn_line