`
banxi1988
  • 浏览: 151904 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

C++初步之命名空间,类,类的静态方法,函数模板,虚析构函数

    博客分类:
  • 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; // prints
	cout <<"compare"<<c<<","<<d<<"the max was:"<<Util::max(c,d)<< endl; // prints
	return 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++入门指南-v2.4.pdf

    3.4 C++类的构造函数与析构函数 39 3.5 对象数组 47 3.6 this指针 50 3.7 static静态成员变量 52 3.8 static静态成员函数 53 3.9 const成员变量和成员函数 55 3.10 const对象(常对象) 56 3.11 友元函数和友元类 58 ...

    C++ Primer第四版【中文高清扫描版】.pdf

    15.4.4 虚析构函数 495 15.4.5 构造函数和析构函数中的虚函数 497 15.5 继承情况下的类作用域 497 15.5.1 名字查找在编译时发生 498 15.5.2 名字冲突与继承 498 15.5.3 作用域与成员函数 499 15.5.4 虚函数与作用域 ...

    Visual C++开发经验技巧宝典(第1章)

    0054 基类的析构函数应该是虚方法 20 0055 访问限定符分析 21 0056 访问其他类的私有成员函数 21 0057 如何定义友员类 22 1.7 多态 23 0058 纯虚函数的使用 23 0059 覆盖基类的成员函数 23 0060 如何...

    C++和面向对象数值计算

    8.1.6 虚析构函数 8.2 抽象类 8.3 访问控制 8.3.1 访问成员 8.3.2 基类访问 8.4 多重继承 8.4.1 去除二义性 8.4.2 重复基类 8.4.3 虚基类 8.4.4 多重继承中的访问控制 8.5 运行时的类型...

    C++Primer视频(高级)下载地址

    11.13章 析构函数 12.13章 深复制、浅复制 13.13章 管理指针成员 14.14章 重载操作符的定义 15.14章 重载输入输出操作符 16.14章 重载算术操作符 17.14章 重载关系操作符(一) 18.14章 重载关系操作符...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    9.9.7 引用类的析构函数和结束函数 9.9.8 通用类 9.10 小结 9.11 练习 第10章 调试技术 10.1 理解调试 10.1.1 程序故障 10.1.2 常见故障 10.2 基本的调试操作 10.2.1 设置断点 10.2.2 设置跟踪点 10.2.3 启动调试...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    9.9.7 引用类的析构函数和结束函数 9.9.8 通用类 9.10 小结 9.11 练习 第10章 调试技术 10.1 理解调试 10.1.1 程序故障 10.1.2 常见故障 10.2 基本的调试操作 10.2.1 设置断点 10.2.2 设置跟踪点 10.2.3 启动调试...

    C++编程思想习题

    14.9析构函数和虚拟析构函数 14.10小结 14.11练习 第15章 模板和包容器类 15.1包容器和循环子 15.2模板综述 15.2.1C方法 15.2.2Smalltalk方法 15.2.3模板方法 15.3模板的语法 15.3.1非内联函数定义 15.3.2栈模板...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    9.9.7 引用类的析构函数和结束函数 9.9.8 通用类 9.10 小结 9.11 练习 第10章 调试技术 10.1 理解调试 10.1.1 程序故障 10.1.2 常见故障 10.2 基本的调试操作 10.2.1 设置断点 10.2.2 设置跟踪点 10.2.3 启动调试...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    14.2.2 派生类的析构函数 426 14.2.3 保护继承和私有继承 436 14.2.4 多继承 437 第15章 多态与虚函数 442 15.1 虚函数基础 442 15.1.1 后绑定 442 15.1.2 C++中的虚函数 443 15.1.3 抽象类和纯虚函数 448 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    *4.7 函数模板 *4.8 有默认参数的函数 4.9 函数的嵌套调用 4.10 函数的递归调用 4.11 局部变量和全局变量 4.11.1 局部变量 4.11.2 全局变量 4.12 变量的存储类别 4.12.1 动态存储方式与静态存储方式 4.12.2 自动变量...

    C++编程思想.pdf

    4.2 用析构函数确保清除 56 4.3 清除定义块 58 4.3.1 for循环 59 4.3.2 空间分配 60 4.4 含有构造函数和析构函数的stash 61 4.5 含有构造函数和析构函数的stack 63 4.6 集合初始化 65 4.7 缺省构造函数 67 ...

    C++ 语言 详细教程电子版

    4.2 用析构函数确保清除 56 4.3 清除定义块 58 4.3.1 for循环 59 4.3.2 空间分配 60 4.4 含有构造函数和析构函数的stash 61 4.5 含有构造函数和析构函数的stack 63 4.6 集合初始化 65 4.7 缺省构造函数 67 4.8 小结 ...

    零起点学通C++多媒体范例教学代码

    13.13虚析构函数 13.14总结 第14章 数组 14.1 数组的基本用法 14.1.1 什么是数组 14.1.2数组元素 14.1.3数组下标越界 14.1.4 倒序输出 14.1.5 将数组的下标定义为常量 14.1.6 手动操作数组元素 14.1.7 数组的初始化...

    零起点学通C++学习_多媒体范例教学代码

    13.13虚析构函数 13.14总结 第14章 数组 14.1 数组的基本用法 14.1.1 什么是数组 14.1.2数组元素 14.1.3数组下标越界 14.1.4 倒序输出 14.1.5 将数组的下标定义为常量 14.1.6 手动操作数组元素 14.1.7 ...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    9.9.7 引用类的析构函数和结束函数 9.9.8 通用类 9.10 小结 9.11 练习 第10章 调试技术 10.1 理解调试 10.1.1 程序故障 10.1.2 常见故障 10.2 基本的调试操作 10.2.1 设置断点 10.2.2 设置跟踪点 10.2.3 启动调试...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    9.9.7 引用类的析构函数和结束函数 9.9.8 通用类 9.10 小结 9.11 练习 第10章 调试技术 10.1 理解调试 10.1.1 程序故障 10.1.2 常见故障 10.2 基本的调试操作 10.2.1 设置断点 10.2.2 设置跟踪点 10.2.3 启动调试...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    9.9.7 引用类的析构函数和结束函数 9.9.8 通用类 9.10 小结 9.11 练习 第10章 调试技术 10.1 理解调试 10.1.1 程序故障 10.1.2 常见故障 10.2 基本的调试操作 10.2.1 设置断点 10.2.2 设置跟踪点 10.2.3 启动调试...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     15.7.1 虚析构函数 552  15.7.2 合成拷贝控制与继承 552  15.7.3 派生类的拷贝控制成员 554  15.7.4 继承的构造函数 557  15.8 容器与继承 558  15.8.1 编写Basket类 559  15.9 文本查询程序再探 562  ...

Global site tag (gtag.js) - Google Analytics