1、如果没有析构?
如果不用构造函数初始化,该怎么办:
为每个类都提供一个public的initialize函数;
对象创建后立即调用initialize函数进行初始化。
缺点
1)initialize只是一个普通的函数,必须显示的调用
2)一旦由于失误的原因,对象没有初始化,那么结果将是不确定的
没有初始化的对象,其内部成员变量的值是不定的。
所以C++对类提供了一个给对象的初始化方案,就是构造函数。
2、构造函数
定义
C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数.
class 类名 { 类名(形式参数) { 构造体 } };
比如:
class A { A(形参) { } };
调用
自动调用:一般情况下C++编译器会自动调用构造函数.
手动调用:在一些情况下则需要手工调用构造函数.
规则:
1 在对象创建时自动调用,完成初始化相关工作。
2 无返回值,与类名同,默认无参,可以重载,可默认参数。
3 一经实现,默认不复存在。
3、析构函数
定义
C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数.
class 类名 { ~类名() { 析构体 } };
比如:
class A { ~A() {} };
规则:
1 对象销毁时,自动调用。完成销毁的善后工作。
2 无返值 ,与类名同。无参。不可以重载与默认参数
析构函数的作用,并不是删除对象,而在对象销毁前完成的一些清理工作。
代码示例:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Test { public: //Test类的构造函数 //在对象被创建的时候,用来初始化对象的函数 Test(int a, int b) { m_x = a; m_y = b; } Test(int a) { m_x = a; m_y = 0; } //无参数的构造函数 Test() { m_x = 0; m_y = 1; } void printT() { cout << "x=" << m_x << ",y=" << m_y << endl; } //析构函数和构造函数都没有返回值, //析构函数没有形参 ~Test() { cout <<" ~Test()..." << endl; } private: int m_x; int m_y; }; void test() { Test t1(10, 20); t1.printT(); //在一个对象临死之前,要自动调用析构函数 //即:在test执行完毕之后,会在"}"触发析构函数 } int main(void) { Test t1(10, 20); t1.printT(); Test t2(100); t2.printT(); Test t3;//就是调用类的无参数构造函数 t3.printT(); test(); return 0; }