构造与析构

构造函数与析构函数建立的分析:

1、以引用作为接收参数(形参)时,不构造临时对象

结果为:

分析:调用Base的构造函数建立base1,调用Base的构造函数建立base2,构造t1对象时应先构造好其数据成员,由于以引用接收,则不会构造临时对象,所以调用Test的构造函数构造t1 对象,同理,构造t2对象;然后进行析构t2,析构t1.

分析:调用Base的构造函数建立base1,调用Base的构造函数建立base2。

构造Test 类的t1对象时,注意其数据成员是Base类的对象。所以先要构造好base对象。

由于不是以引用接收的,则会产生临时对象,则调用se的拷贝构造,再对数据对象进行初始化时,又进行调用Base的拷贝构造,接着调用Test的构造,然后调用Base的析构将临时对象析构,同理构造t2对象,最后开始析构t2,析构其成员对象base调用Base的析构,析构t1,析构其成员对象base调用Base的析构,接着析构base2,base1.

注意:先构造的最后析构。

时间: 2024-07-30 20:29:52

构造与析构的相关文章

C++ 类的继承三(继承中的构造与析构)

//继承中的构造与析构 #include<iostream> using namespace std; /* 继承中的构造析构调用原则 1.子类对象在创建时会首先调用父类的构造函数 2.父类构造函数执行结束后,执行子类的构造函数 3.当父类的构造函数有参数时,需要在子类的初始化列表中显示调用 4.析构函数调用的先后顺序与构造函数相反 继承与其他类做成员变量混搭的情况下,构造和析构嗲用原则 1.先构造父类,在构造成员变量,最后构造自己 2.先析构自己,再析构成员变量,最后析构父类 */ clas

再探Delphi2010 Class的构造和析构顺序

发了上一篇博客.盒子上有朋友认为Class的构造和析构延迟加载.是在Unit的初始化后调用的Class的构造.在Unit的反初始化前调用的Class的析构函数. 为了证明一下我又做了个试验 unit Unit2; interface Type  TClassTest = class    class constructor create();    class destructor destory();  end; implementationuses  Windows; { TClassTes

C++我们必须要了解的事之具体做法(1)——构造、复制构造、析构、赋值操作符背后的故事

1. C++默认调用哪些函数 当类中的数据成员类型是trival数据类型(就是原c语言的struct类型)时,编译器默认不会创建ctor. copy ctor.assign operator.dctor. 只有在这些函数被调用时,编译器才会创建他们. 这时候我们要自己创建构造函数,初始化内置数据类型.一般我们不需要复制控制函数,当需要时编译器合成的就很好.一般编译器合成的复制控制函数只是简单的复制成员,若能满足要求就不需要自己写. 当类中含有引用.const成员时,必须在初始化列表中初始化成员.

Python Class __init__ __del__ 构造,析构过程解析【转】

转载自: http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>即<Learning Python>学到Class部分,遇到了类的构造析构部分的问题: 1.什么时候构造? 2.什么时候析构? 3.成员变量如何处理? 4.Python中的共享成员函数如何访问? ------------------------ 探索过程: 1.经过查找,Python中没有专用的构造和析构函数,但是一般可以在__init_

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

Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this

  1.当在一个子类当中调用构造函数,其父类构造函数肯定先被调用.如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始化,所以无法调用子类与之对应的函数.即为指向虚函数表的指针vptr没被初始化又怎么去调用派生类的virtual函数呢?析构函数也相同,派生类先于基类被析构,又如何去找派生类相应的虚函数? 2.做法:将子类的某个函数改为non-virtual,然后在子类构造函数中传递参数给父类函数.然后父类的构造函数

第46课 继承中的构造与析构

1. 子类对象的构造 (1)子类中可以定义构造函数 (2)子类构造函数,必须对继承而来的成员进行初始化,有两种方式 ①直接通过初始化列表进行初始化或赋值的方式进行初始化 ②调用父类构造函数进行初始化 (3)父类构造函数在子类中调用方式 ①默认调用:适用于无参构造函数和使用默认参数的构造函数 ②显式调用:通过初始化列表进行调用,适用于所有父类构造函数 [编程实验]子类的构造初探 #include <iostream> #include <string> using namespace

Effective C++ Item 9 绝不在构造和析构过程中调用virtual函数

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层) 示例: <pre name="code" class="cpp">#include <iostream> #include <string> using namespace std; c

NO.8:绝不在构造或者析构过程中调用virtual函数

在构造和析构执行期间不要调用virtual函数,因为这类调用从不会下降至derived class(比起当前执行构造函数和析构函数) 如果在base class 构造函数或者析构函数调用virtual,derived class构造时会先构造base class,则base class中的virtual实际调用是base class的; 第一种解释:derived class类先执行构造base class部分,然而在base class构造过程中,derived class部分是为初始化的,如

Php面向对象学习笔记 – 构造、析构、对象赋值、克隆

Php面向对象学习笔记 – 构造.析构.对象赋值.克隆 class student { public  $stu_id;       // 定义成员变量 public  $stu_name; public  function sayName()   // 成员函数 { echo $this->stu_name;   // $this  访问该对象的成员变量 } } $stu = new  Student;      // 创建对象 $stu->stu_id = '0607001'; $stu-