读书人

C++初始之命名空间,类,类的静态方法,函

发布时间: 2012-10-06 17:34:01 作者: rapoo

C++初步之命名空间,类,类的静态方法,函数模板,虚析构函数
在学习C++的时候,开始使用using namespace std;
但是对于命名空间不是很了解.后来在学习C#的时候多了些了解.
但是对于程序包而言主要还是在Java中对于Java包的理解来理解的.
我自己写了个涉及题目上概念的一个简单的CPP程序.如下:
首先声明一点,我是在Ubuntu下用Eclipse的Linuxtool来开发的.
首先是头文件,

/* * Util.h * *  Created on: 2011-10-12 *      Author: banxi1988 */#ifndef UTIL_H_#define UTIL_H_namespace banxi {class Util {public:Util();virtual ~Util();template<typename T>static T max(T a,T b){return a > b?a:b;}};}//end of namespace of banxi#endif /* UTIL_H_ */


然后是.cpp文件.
/* * Util.cpp * *  Created on: 2011-10-12 *      Author: banxi1988 */#include "Util.h"namespace banxi {Util::Util() {// TODO Auto-generated constructor stub}Util::~Util() {// TODO Auto-generated destructor stub}}


然后是测试类:
#include <iostream>#include "Util.h"using namespace banxi;using namespace std;int main() {int a = 3,b = 4;double c = 3.2,d = 4.3;cout <<"compare"<<a<<","<<b<<"the max was:"<<Util::max(a,b)<< endl; // printscout <<"compare"<<c<<","<<d<<"the max was:"<<Util::max(c,d)<< endl; // printsreturn 0;}/** * 输出结果: * * compare3,4the max was:4 * compare3.2,4.3the max was:4.3 */


一个注意到的问题:
为什么Eclipse生成的代码中,要把析构函数定义为虚析构函数.
virtual ~Util();
虚析构函数使用virtual说明,格式如下:
virtual ~<类名>();
虚析构函数的必要性.
delete运算符和析构函数一起工作,当使用delete删除一个对象时,delete隐含着对析构函数的一次调用.这个保证了使用基类类型的指针能够调用适当的析构函数针对不同的对象进行清除工作.
主要是为了在删除如 Base b = new Subclass;
delete b;
这个时候删除b,如果不是用虚析构函数的话,就不会调用派生类的析构函数.
这个Subclass中new分配的内存就没有得到释放.

关于静态方法:
静态方法也可以称之为类方法,从Java中加深了对此的了解.
一般在函数定义前加上static关键字.调用静态成员函数格式为:
<类名>::<静态成员函数名>(<参数表>);
<类名>.<静态成员函数名>(<参数表>);
静态成员函数的主要作用是用来访问同类中静态成员,维护对象之间共享的数据.

这里容易出现的问题,就是在静态函数中访问实例成员或者函数.
但是由于静态成员函数没有this指针,它只能直接访问该类的静态数据成员,静态成员函数,和类以外的函数和数据,访问类中的非静态数据成员必须通过参数传递方式得到对象名,然后通过对象名来访问.

关于虚析构函数作用示例见我的另一文章吧.

读书人网 >C++

热点推荐