类的构造函数、析构函数与赋值函数(一)
2014-08-09 08:01
197 查看
每一个类只有一个析构函数和一个赋值函数,但是可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果未编写上述函数,C++编译器会自动为类A生成四个缺省的函数,如:
既然编译器能为类自动生成缺省函数,是不是就不用程序员编写了呢?答案显然是否定的。
原因如下:
(1)如果使用“缺省的无参数的构造函数”和“缺省的析构函数”,就失去了初始化和清除的机会,类的使用就会变得缺少灵活性。
(2)最重要的一点:“缺省的无参数构造函数”和“缺省的析构函数"均采用”位拷贝“而非”值拷贝“的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。
虽然C++的编译器具有严格的类型安全检查功能,几乎能找出程序中所有的语法问题,但是语法错误只是最基本的错误。级别高的错误往往在语法上是正确的,但是实际运行时会产生各种问题。典型的就是由于”变量没有被正确的初始化或者清除造成的“。
这个问题,C++可以通过构造函数和析构函数来及解决:把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建的时候,构造函数自动执行。当对象消亡时,析构函数被自动执行。
构造函数和析构函数的名字不能随便取,规则是:构造函数、析构函数的函数名与类名相同,且构造函数、析构韩式无返回值。另外,因为构造函数与析构函数的功能正好相反,为了区分构造函数与析构函数,在构造函数前加上”~‘号表示析构函数。
注意:无返回值 与 返回值类型为void 不同,不是一个概念。
原因如下:
(1)如果使用“缺省的无参数的构造函数”和“缺省的析构函数”,就失去了初始化和清除的机会,类的使用就会变得缺少灵活性。
(2)最重要的一点:“缺省的无参数构造函数”和“缺省的析构函数"均采用”位拷贝“而非”值拷贝“的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。
虽然C++的编译器具有严格的类型安全检查功能,几乎能找出程序中所有的语法问题,但是语法错误只是最基本的错误。级别高的错误往往在语法上是正确的,但是实际运行时会产生各种问题。典型的就是由于”变量没有被正确的初始化或者清除造成的“。
这个问题,C++可以通过构造函数和析构函数来及解决:把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建的时候,构造函数自动执行。当对象消亡时,析构函数被自动执行。
构造函数和析构函数的名字不能随便取,规则是:构造函数、析构函数的函数名与类名相同,且构造函数、析构韩式无返回值。另外,因为构造函数与析构函数的功能正好相反,为了区分构造函数与析构函数,在构造函数前加上”~‘号表示析构函数。
注意:无返回值 与 返回值类型为void 不同,不是一个概念。
相关文章推荐
- c++的构造函数,析构函数,复制函数,赋值函数,深复制
- C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
- 类的构造函数、析构函数与赋值函数
- 类String的构造函数、拷贝构造函数、析构函数、赋值函数
- 《高质量C++/C编程指南》第9章:类的构造函数、析构函数与赋值函数
- String的构造函数,拷贝构造函数、析构函数和赋值函数
- 编写类String 的构造函数、析构函数和赋值函数
- 如何用c语言实现CString的构造函数、析构函数和赋值函数?
- 编写类String的构造函数、析构函数和赋值函数
- string类的构造函数,拷贝构造函数,析构函数和赋值函数
- C++(1)C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- 构造函数、拷贝构造函数、赋值函数、析构函数的调用顺序
- 编写String的构造函数、析构函数、赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 构造函数,拷贝构造函数,析构函数,赋值函数,关键字
- 编写类String的构造函数、析构函数和赋值函数
- 详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数
- 高质量C++/C编程指南 -- 第9章 类的构造函数、析构函数与赋值函数
- 《高质量C++/C编程指南》第9章:类的构造函数、析构函数与赋值函数
- 类String的构造函数、析构函数和赋值函数