C++学习——静态对象的初始化问题
来源:互联网 发布:linux ifup eth0 编辑:程序博客网 时间:2024/06/12 21:01
我们设工程中有一个头文件depend.h, 在该头文件中我们声明了一个类——initial, 同是定义了一个initial类的静态对象——static initial init。
代码如下所示:
//////////////////////////////////////////////////////////
// 文件:depend.h
//////////////////////////////////////////////////////////
#ifndef DEPEND_H_
#define DEPEND_H_
#include <iostream>
using namespace std;
class initializer
{
public:
initializer()
{
cout << "initializer: "<<endl;
}
~initializer()
{
cout << "~initializer:" << endl;
}
};
static initializer init;
#endif
同时我们在三个.cpp文件中都包含了depend.h这个头文件。 这个时候编译器在编译这三个.cpp的文件的时候就会分别生成三个名称为init的静态对象,由于静态对象的作用域只局限在当前文件内,所以三个静态对象重名不会在程序连接时产生错误,因为他们对于当前文件外的代码是透明的。我们通过在三个.cpp文件中定义三个函数用于输出它的init对象的首地址来表示三个.cpp文件中的init对象不是同一个对象.
代码如下:
/////////////////////////////////////////////////////////////
// 文件:depend.cpp
/////////////////////////////////////////////////////////////
#include "depend.h"
void OutClassAddress()
{
cout << "The starting address of the static object allocate in file:depend.cpp" << endl;
cout << & init << endl;
}
/////////////////////////////////////////////////////////////
// 文件:depend1.cpp
/////////////////////////////////////////////////////////////
#include "depend.h"
void OutClassAddress1()
{
cout << "The starting address of the static object allocate in file:depend1.cpp" << endl;
cout << & init << endl;
}
/////////////////////////////////////////////////////////////
// 文件:depend2.cpp
/////////////////////////////////////////////////////////////
#include "depend.h"
void OutClassAddress2()
{
cout << "The starting address of the static object allocate in file:depend2.cpp" << endl;
cout << & init << endl;
}
extern void OutClassAddress(); //声明这个函数在别的文件中已经定义过了,告诉编译器放行,连接器在连接的时候会自动到别的文件中找这个函数
extern void OutClassAddress1();
void mian()
{
OutClassAddress();
OutClassAddress1();
OutClassAddress2();
}
- C++学习——静态对象的初始化问题
- C++学习——静态对象的初始化问题
- 静态对象的初始化
- 一个类中静态容器对象的初始化问题
- 一个类中静态容器对象的初始化问题
- 一个类中静态容器对象的初始化问题
- c++静态对象的初始化
- [c++]非局部静态对象初始化顺序
- 对象数组的初始化 分为 静态初始化 和动态初始化
- 【IOS 开发学习总结-OC-15】objective-c面向对象之——对象初始化
- iOS学习(六)Objective-C 对象的初始化
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十章 对象初始化
- C# 对象初始化问题(可否像C语言的结构一样,简洁的初始化)
- 不同编译单元内的非局部静态对象的初始化次序问题
- 静态对象如何初始化?
- iOS学习笔记01—初始化对象
- 面向对象——静态和动态的小问题
- C语言静态数组的初始化
- 网站开发人员应该知道的61件事
- 微妙
- acm,poj中不容易发现的runtime error解决方法
- java socket多线程聊天室
- 修改formview里的 date format
- C++学习——静态对象的初始化问题
- Struts2_1500_ResultType
- CSS改变表格行的背景颜色
- CSS改变链接的颜色和背景色
- SYSTEM V百度百科
- 算法题31 输出1到N位的十进制数,N可能很大。
- Linux内核源码检索网站
- 木马免杀原理及方法(超全)
- 杀毒软件工作原理 及 现在主要杀毒技术