在学习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指针,它只能直接访问该类的静态数据成员,静态成员函数,和类以外的函数和数据,访问类中的非静态数据成员必须通过参数传递方式得到对象名,然后通过对象名来访问.
关于虚析构函数作用示例见我的另一文章吧.
分享到:
相关推荐
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++是一种强类型、静态类型的面向对象编程语言,它在C的基础上增加了类、模板、命名空间等特性,形成了其独特的物件模型。以下是对C++物件模型的一些关键知识点的详细解释: 1. **类(Class)**:C++中的类是定义...
7. **构造函数与析构函数(Constructors and Destructors)**:构造函数用于初始化类的对象,而析构函数在对象生命周期结束时自动执行,用于清理资源。了解这两者对于理解C++的对象生命周期至关重要。 8. **运算符...
以上就是基于题目中提供的部分试题内容所解析的相关C++知识点,包括变量命名、保留字、条件控制、函数选择、构造函数调用、继承访问权限、函数重载、静态成员、派生类构造函数、虚析构函数和模板的概念及其应用。...
2. **构造函数与析构函数**:构造函数用于初始化新创建的对象,而析构函数在对象生命周期结束时自动调用,负责释放资源。这两种特殊成员函数是C++中管理对象生命周期的关键。 3. **继承与多态**:继承允许一个类...
0`)、析构函数(`?1`)、new(`?2`)、delete(`?3`)等,有系统规定的符号。 此外,函数模板不被视为自定义类型,而是单独处理。在实际编程中,遵循这些规则可以帮助正确创建和使用动态导入库,确保编译器能够...
虚析构函数确保在删除对象时调用正确的析构函数,即使通过基类指针操作派生类对象。 8. **模板(Templates)**:模板是C++的泛型编程工具,可以创建函数模板和类模板,以实现对不同类型数据的操作。 9. **STL...
析构函数用于在对象销毁前执行清理代码,每个构造的对象都会在适当的时候调用析构函数。 以上知识点是根据提供的文件内容进行的总结,涵盖了C++中的基本概念、函数、类与对象、以及输入输出流等方面的知识。在准备...
C++类通常包含构造函数、析构函数、成员函数和数据成员。在易语言中,我们可以通过循环和条件判断来生成这些元素对应的C++文本。例如,对于每个成员变量,我们需要生成C++的声明和初始化代码;对于成员函数,我们...
5. **构造函数与析构函数**:构造函数是类的一个特殊成员函数,用于初始化新创建的对象。析构函数则在对象生命周期结束时自动调用,用于清理资源。C++允许定义默认构造函数、带参数的构造函数和拷贝构造函数。 6. *...
10. **构造与析构函数**:构造函数用于初始化对象,而析构函数则在对象生命周期结束时执行,通常用于释放资源。C++还支持拷贝构造函数和移动构造函数,用于处理对象的复制和移动。 11. **友元**:友元函数或友元类...
25. **编写派生类的析构函数时,需要显式调用基类的析构函数吗?** - 如果基类的析构函数不是虚函数,则需要显式调用。如果基类析构函数是虚的,则不需要。 26. **结构和类有什么区别?** - 在C++中,默认情况下...
然而,C++引入了类、对象、模板、异常处理、命名空间等关键特性,这些都是C所不具备的。这些新特性使得C++更适合大型项目开发,提供了更好的代码组织和重用机制。 1. **面向对象编程**:C++的核心特性之一是支持...
这部分详细解释了类的声明、构造函数、析构函数、成员函数、访问修饰符、友元等概念。 3. **模板**:C++的模板允许创建泛型代码,可以用于数据类型或函数,实现代码复用。包括函数模板和类模板。 4. **继承和多态*...
0054 基类的析构函数应该是虚方法 20 0055 访问限定符分析 21 0056 访问其他类的私有成员函数 21 0057 如何定义友员类 22 1.7 多态 23 0058 纯虚函数的使用 23 0059 覆盖基类的成员函数 23 0060 如何...
在这个课件中,我们将深入理解类与对象的定义、使用,以及相关的构造函数、析构函数、访问权限、成员函数、静态成员、友元等关键知识点。 首先,类(Class)是C++中定义的一种数据结构,它包含了数据成员(Data ...
2. **构造函数与析构函数**:C++中的构造函数用于初始化新创建的对象,而析构函数则在对象生命周期结束时自动调用,用于清理资源。这对管理内存尤其重要,防止内存泄漏。 3. **运算符重载**:C++允许用户为已有的...
C++的模板功能允许我们编写泛型代码,无论是函数模板还是类模板,都能在编译时根据实际类型生成特定的代码,实现了泛型编程。这使得代码更加灵活,能够处理多种数据类型。 六、标准库 C++标准库提供了大量的工具,...
4. **构造函数与析构函数**:构造函数用于初始化新创建的对象,而析构函数则在对象生命周期结束时自动调用,用于清理资源。 5. **运算符重载**:C++允许程序员为已有的运算符赋予新的含义,使其能作用于自定义的...