C语言基础 第16章
时间:2025-07-05
时间:2025-07-05
C语言入门
第16章
类 的 工 具
16.1 构造函数和析构函数 16.2 函数重载 16.3 运算符重载 16.4 对象的动态存储管理
C语言入门
16.1
构造函数和析构函数
构造函数是一个特殊的成员函数,它的作 用是创建并初始化对象,主要是对数据成员初 始化。 构造函数的函数名与类名相同。它在对象 创建时被自动调用,并对对象进行初始化。 如果在类定义的成员函数中,没有说明构 造函数,系统将提供一个构造函数,称为默认 构造函数。如果作为类的成员函数,显式地说 明了一个构造函数,系统就不再提供构造函数, 而是自动调用用户定义的构造函数。
C语言入门
析构函数(destructor)是系统提供另 一个特殊成员函数,它在对象消失时被自 动调用,释放为该对象动态分配的内存空 间。 如果在类的成员函数中显式地说明析 构函数,则系统不再提供析构函数,而是 自动调用用户定义的析构函数。
C语言入门
16.1.1
不带参数的构造函数
不带参数的构造函数的一般形式为:类名 对象名(){ 函数体 } 每当创建一个对象时,构造函数就自动 地被调用,对数据成员初始化。
C语言入门
16.1.2 析构函数如果在定义类时没有提供析构函数,系统 会自动创建一个析构函数,其形式为为:
~类名(){ }如果在类的对象中分配有动态内存,则应 定义析构函数。以完成释放内存的工作。这 时析构函数有如下的形式:
C语言入门
类名 对象名() { delete 指针; } 或 类名 对象名() { delete [ ]数组名; }
C语言入门
一个类中可以有多个构造函数,但析构 函数只能有一个。对象被析构的顺序,与 其建立时的顺序相反,即后构造的对象先 析构。 例16.1.1 为例15.1.4定义的类counter加 入构造函数,初始化数据成员value为0。 加入析构函数处理释放对象的工作。 由于使用了构造函数,函数init_counter() 就不需要了。
C语言入门
程序如下: #include <iostream.h> class counter //定义类counter { private: int value; public:
C语言入门
counter(void); ~counter(void); void inc(void); void dec(void); int getvalue(void); }; counter::counter(void) //定义构造函数 {
// 构造函数 // 析构函数
C语言入门
value = 0; cout << "counter initialized\n"; } counter::~counter(void) //定义析构函数 { cout << "counter destroyed\n"; } void counter::inc(void) { value++; }
C语言入门
void counter::dec(void) { value--; } int counter::getvalue(void) { return value; } int main(void) {
C语言入门
counter counter1, counter2; // 创建对象,自动调用构造函数,初始化 counter1.inc(); counter2.dec(); cout<<"the value of counter1="<<counter1.getvalue()<<"\n"; cout<<"the value of counter2="<<counter2.getvalue()<<"\n"; return 0; }
C语言入门
程序的输出如下: counter initialized // 创 建 对 象 counter1时调用构造函数 counter initialized // 创 建 对 象 counter2时调用构造函数 the value of counter1=1 the value of counter2=-
1 counter destroyed // 撤 销 counter2 时调用析构函数 counter destroyed //撤销counter1时 调用析构函数
C语言入门
由以上程序的输出可以看出,执行程序 时,首先为两个对象各调用一次构造函数, 对变量value进行初始化。这表现在输出的 前两行。 程序执行完对对象的操作后,在退出它 们的代码段之前,为各对象又分别调用了 析构函数,以撤销所建立的两对象。这表 现在程序输出的最后两行。 上述程序的构造函数和析构函数中,都 有一个输出字符串的语句:
C语言入门
"counter initialized\n" "counter destroyed\n"
它们是为了演示而安排的。实际上, 这些字符串的输出不是必要的。
C语言入门
16.1.3 带参数的构造函数带参数的构造函数的一般形式为: 构造函数名(形参表); 在程序中创建对象时,用户需要提供构 造函数的参数。其一般形式为: 类名 对象名(实参表);
…… 此处隐藏:94字,全部文档内容请下载后查看。喜欢就下载吧 ……