C++构造函数和析构函数到底有什么作用啊?。。。一菜鸟求助!!!

如题所述

1.构造函数

构造函数(constructor)是类的一个特殊的成员函数,它与类名同名。当定义该类的对象时,构造函数将被系统自动调用用以实现对该对象的初始化。

构造函数不能有返回值,因而不能指定包括void在内的任何返回值类型。

构造函数的定义与其他成员函数的定义一样可以放在类内或类外。

构造函数的定义格式为

类名(形参说明)

{函数体}

构造函数既可以定义成有参函数,也可以定义成无参函数,要根据问题的需要来定。

注意:程序中不能直接调用构造函数,构造函数是在创建对象时由系统直接调用的,因此,在构造函数中一般完成初始化类成员变量的操作。

2.构造函数的重载

一个类中出现了两个以上的同名的成员函数时,称为类的成员函数的重载。

在类的成员函数的重载中,比较常见形式是构造函数的重载,当类中出现了重载构造函数时,C++语言将根据构造函数中的参数个数和类型选择合适的构造函数来完成对象的构造。

3.默认构造函数与缺省参数的构造函数

如果在类中没有显示定义构造函数,则编译系统会为该类提供一个默认的构造函数,该默认构造函数是一个无参函数,函数体为空,它仅仅负责创建对象,而不做任何初始化工作(即不给相应的数据成员赋初值),所以在该类的对象创建时不能保证有一个确定的初始状态。

良好的编程习惯应该是给类提供合适的完成初始化工作的构造函数。

但是,只要一个类定义了一个构造函数(不一定是无参构造函数),编译系统就不再提供默认的构造函数。

当构造函数具有缺省参数时,称为具有缺省参数的构造函数,在使用具有缺省参数的构造函数时,要防止二义性。

4.拷贝构造函数

拷贝构造函数是一种特殊的构造函数。定义拷贝构造函数的一般格式为

类名::类名(const 类名 &形式参数)

{ 函数体 }

拷贝构造函数的函数名与类名同名。该函数也没有返回值。

拷贝构造函数的功能是通过将一个同类对象的值拷贝给一个新对象,来完成对新对象的初始化,即用一个对象去构造另外一个对象。

如果在类的定义中没有定义拷贝构造函数,则编译系统将自动生成一个具有上述形式的默认的拷贝构造函数,作为该类的公有成员。

5.析构函数

与构造函数对应的是析构函数。当一个对象被定义时,系统会自动调用构造函数为该对象分配相应的资源,当对象使用完毕后且在对象消失前,系统会自动调用类的析构函数来释放这些系统资源。

析构函数也是类的一个特殊的成员函数,其函数名称是在类名的前面加上“~”;它没有返回值,也没有参数。一个类中只能拥有一个析构函数,所以析构函数不能重载。

析构函数的定义方式为

~类名()

{ 函数体 }

如果程序员在定义类时没有为类提供析构函数,则系统会自动创建一个默认的析构函数,其形式为

~类名()

{ }

对象被析构的顺序与其创建时的顺序正好相反,即最后构造的对象最先被析构。

如果一个对象是被new运算符动态创建的,当使用delete运算符释放它时,delete将会自动调用析构函数。

6.一个类的对象作为另一个类的数据成员

当一个类中的数据成员是某一个类的对象时,可称这种成员是新建类的子对象或对象成员,则新类的定义格式可表示为

calss X

{

类名1 成员名1;

类名2 成员名2;

类名3 成员名3;

……………

类名n 成员名n;

…。………… //其他成员

};

其中,X为新建类的类名,类名1、类名2、……、类名n必须是已定义过的类。如

class A {};

class B

{

A a;

};

则在创建类B的对象(调用类B的构造函数)时,会自动调用类A的构造函数。如果类A的构造函数为有参函数时,通常采用初始化表的方式来调用构造函数。

新类的构造函数的一般定义格式为

新类(参数表0):成员1(参数表1),成员2(参数表2),…,成员n(参数表n)

{ ………… }

其中,成员1、成员2、……、成员n是新类中的对象成员;参数表1提供初始化成员1所需的参数,参数表2提供初始化成员2所需的参数,依此类推,并且这几个参数表中的参数均来自参数表0.另外,初始化新类的非对象成员所需的参数,也由参数表0提供。

7.常对象与常对象成员

(1)常对象

常对象是指对象常量,其定义格式为

const 类名 对象名;

从格式中可以看出,常对象的定义与一般对象的定义相比,在类名前必须加const关键字。

常对象具有以下特点

l 常对象在定义时必须进行初始化,而且在程序中不能再对其进行更新。

l 通过常对象只能调用类中的常成员函数,而不能调用类中的其他成员函数。

(2)常对象成员

常对象成员分为常成员函数和常数据成员。

1)常成员函数

在类中,使用关键字const说明的成员函数成为常成员函数,常成员函数的说明格式为

类型 函数名(形参表) const;

类中的常成员函数与普通成员函数相比,具有以下特点

l 常成员函数为类的只读函数,这种成员函数可以读取数据成员的值,但不可以更新数据成员的值,它也不能调用该类中没有const修饰的其他成员函数。

l 常成员函数定义中的const关键字是函数类型的一部分,因此在其实现部分中也要带上const关键字。

l 常成员函数定义中的const关键字可以参与区分重载函数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-25
系统为每个类分配默认构造函数,new时或者定义实例时都会自动调用。析构也差不多。这俩你可以自己重载,赋予附加的功能,比如赋初始值,打印一些话(析构一般不重载)。
平时这俩都极少由你自己显式调用,一般都是系统给你调。你可以理解为构造函数创造了实例,析构函数杀死了实例。本回答被提问者采纳
第2个回答  2011-05-22
你有没有c++书,那上面应该有很详细的介绍啊!?

C++构造函数和析构函数到底有什么作用啊?。。。一菜鸟求助!!!
拷贝构造函数的功能是通过将一个同类对象的值拷贝给一个新对象,来完成对新对象的初始化,即用一个对象去构造另外一个对象。如果在类的定义中没有定义拷贝构造函数,则编译系统将自动生成一个具有上述形式的默认的拷贝构造函数,作为该类的公有成员。5.析构函数 与构造函数对应的是析构函数。当一个对...

c++构造函数和析构函数的区别
2、作用不同:析构函数:析构函数被调用。构造函数:为对象成员变量赋初始值 3、目的不同:析构函数:”清理善后” 的工作 构造函数:主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

理解\/总结C++中的构造函数和析构函数
在C++中,构造函数和析构函数扮演着至关重要的角色。它们分别负责对象的初始化和清理工作,这些操作是编译器强制要求的,即使不显式定义,编译器也会提供默认的空实现。构造函数用于在创建对象时为成员属性赋值,无返回值,函数名与类名相同,并支持重载,确保仅在创建对象时调用一次。析构函数则在对象销...

C++构造函数和析构函数详解
它的作用与构造函数相反,一般是执行对象的清理工作,当对象的生命周期结束的时候,会自动的调用。析构函数的作用并不是删除对象,在对象撤销它所占用的内存之前,做一些清理的工作。清理之后,这部分内存就可以被系统回收再利用了。在设计这个类的时候,系统也会默认的提供一个析构函数。在对象的生命周期...

简述构造函数和析构函数的作用
构造函数可用于对象的初始化操作,当对象调用类时,就自动力调用了构造函数,构造函数可以自定义,也可以默认。析构函数是释放对象调用的内存空间。构造函数可以是多个,析构函数一至少只有一个。

C++构造函数和析构函数详解
构造函数的重载 类中可定义多个构造函数,用户可根据传入参数选择不同的初始化方式。析构函数简介 析构函数执行对象的清理工作,当对象生命周期结束时自动调用。它不删除对象,而是释放占用的内存,允许系统回收并重新利用。析构函数无参数,系统默认提供。用户可自定义,实现特定清理逻辑。命名规则 析构函数...

c++中析构函数有什么作用?在什么情况下用?
析构函数主要作用就是释放资源,避免内存泄漏。1、析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间。2、析构函数如果我们不写的话,C++ 会帮我们...

C++析构函数有什么作用
析构函数也是特殊的类成员函数。简单来说,析构函数与构造函数的作用正好相反,它用来完成对象被删除前的一些清理工作,也就是专门的扫尾工作。析构函数是提供一个在对象删除前可以释放这个对象所占有的资源的机会。比如:class A { A(){m_a=new int[10];} ~A(){delete [] m_a;} int * m...

c++什么叫构造函数,它的作用是什么
c++类的构造函数详解 一、 构造函数是干什么的class Counter{public: \/\/ 类Counter的构造函数 \/\/ 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; } private: \/\/ 数据成员 int m_value;} 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作...

为什么需要构造函数和析构函数
比如说你建立了一个数据库对象 那么这个数据库可以存什么样的数据,存多少数据,这些东西需要在创建之初就确定下来。所以使用构造函数,在程序一创建的时候就规定出来 而析构函数是在用户不需要这个对象的时候,销毁一些东西而准备的 比如说银行账户,你销卡了,银行就需要删除你这个账户,需要清除你的个人...

相似回答