===============================================
未完待续,转载时请表明出处:
http://www.cofftech.com/thread-1400-1-1.html
欢迎大家跟帖讨论哈~~~~~
===============================================
现在看一下不同数据类型对象的构造函数和析构函数的调用顺序,从而看出它们的生命周期和作用域。
[例1]建立不同数据类型的对象时,构造函数和析构函数的调用顺序。
此程序按照数据隐藏类型处理,共有三个文件:cons_des.h,cons_des.cpp,cons_des_hide.cpp。其中不向用户提供cons_des_hide.cpp源文件而只提供cons_des_hide.obj目标文件
头文件:
// cons_des.h
#ifndef CONS_DES_H
#define CONS_DES_H
#include <iostream.h>
class base {
int data;
public:
base( int ); // constructor declaration
~base(); // destructor declaration
};
#endif
这是类的接口。
隐藏源文件:
// cons_des_hide.cpp
#include "cons_des.h"
base::base( int value ) : data(value)
{
cout << "Object " << data << " constructor";
}
base::~base()
{ cout << "Object " << data << " destructor " << endl; }
主文件:
// cons_des.cpp
#include "cons_des.h"
void create( void ); // prototype
base first( 1 ); // global object
void main()
{
cout << " (globally created before main)" << endl;
base second( 2 ); // local object
cout << " (local automatic in main)" << endl;
static base third( 3 ); // local static object
cout << " (local static in main)" << endl;
create( ); // call function to create objects
base sixth( 6 ); // local object
cout << " (local automatic in main)" << endl;
}
// ordinary function for creating objects
void create( void )
{
base fourth( 4 );
cout << " (local automatic in create)" << endl;
static base fifth( 5 );
cout << " (local static in create)" << endl;
}
/* Results:
Object 1 constructor (globally created before main)
Object 2 constructor (local automatic in main)
Object 3 constructor (local static in main)
Object 4 constructor (local automatic in create)
Object 5 constructor (local static in create)
Object 4 destructor
Object 6 constructor (local automatic in main)
Object 6 destructor
Object 2 destructor
Object 5 destructor
Object 3 destructor
Object 1 destructor */
以上程序中,当局部对象离开其作用域时,即离开其函数时,就被删除,从而调动其析构函数。
在主程序运行之前,已经建立第一个对象(即全局对象first),主程序运行之后,顺序地建立自动对象second和静态对象third。
接着调用函数create( ),在create( )中建立自动对象fourth和内部静态对象fifth,退出create( )时除静态对象fifth外,删除其它对象并调用它的析构函数,即fourth。
回至主程序后,建立自动对象sixth。
退出主程序时,先删除主程序内的自动对象并调用它们的析构函数,即fourth和second。然后删除内部静态对象并调用它们的析构函数,即second和fifth。最后删除主程序外的全局对象并调用它的析构函数,即first。
此外,当局部对象离开其作用域后,就无法再被访问。例如在主函数main( )中无法访问fourth对象,而在子函数create( )中则无法访问third对象。
分享到:
相关推荐
本程序包含构造函数和析构函数,可以把构造函数和析构函数的作用区分开
C++构造函数和析构函数的调用顺序举例一.调用方法和区别1、构造函数的调用顺序: 基类构造函数、对象成员构造函数、派生类本身的构造函数 2、析构函数的调用顺序:
C++学习资料,学习面向对象语言的朋友可以看看,绝对有用,个人很喜欢
C++构造函数,复制构造函数和析构函数专题[1].pdf C++继承,虚函数与多态性专题.pdf
如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表中的顺序。 3.派生类构造函数。 析构函数 析构函数的调用顺序与构造函数的调用顺序正好相反,将上面3个...
构造函数的调用可以追踪。。。。由于构造函数和析构函数都是自动吊桶的或者更不饿,我们可以自己设立函数来追踪构造函数的调用过称。
该视频更好介绍C++的构造函数和析构函数
C++构造函数、复制构造函数和析构函数专题(修订版).pdf
c++程序设计第十章构造函数和析构函数
调用构造函数和析构函数的顺序:先构造的后析构,后构造的先折构。它相当于一个栈,先进后出。 代码如下:#include<iostream>#include<string>using namespace std;class Student{ public: Student(string,string,...
C++构造函数、复制构造函数和析构函数专题(修订版)[汇编].pdf
C++中的构造函数、析构函数剖析 在C+ + 中, 构造函数是一个在构件对象的时 候调用的特殊的函数, 其目的是对对象进行初始 化工作, 从而使对象被使用之前可以处于一种合 ...“构造函数”和“析构函数”的调用顺序
3、请设计一个拷贝构造函数,实现将参数的值全部传递给当前对象,同时输出“拷贝构造函数被调用” 4、请设计一个析构函数,同时输出“析构函数被调用” 5、设计一个成员函数 int dayDiff(CTime t) ,用于计算...
类的成员有数据成员与函数成员两类,类的数据成员和函数成员统称为类的 成员,类的数据成员一般用来描述该类对象的属性,称为属性;函数成员是描 述类行为,称作方法。函数成员由函数构成,这些作为类成员的函数...
一道很好的习题代码,包含构造、析构、拷贝、重载
构造与析构在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。 初始化对象的...
C++ 语言一直被批评太复杂了,很多细节的地方需要仔细推敲,甚至其构造函数和析构的调用顺序也成为了一个让人迷惑的问题,在此我做了简单的总结。这篇文章主要介绍了C++中构造函数与析构函数的调用顺序,需要的朋友...
1 、定义一个时间类Time,有三个私有成员变量Hour、Minute、Second,定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义...},主函数中调用,再分析此时调用构造函数和析构函数的次数。
C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar