对象的初始化和清理也是两个非常重要的安全问题。
(1)一个对象或变量没有初始化状态,对其使用后果是未知的。
(2)同样的使用完一个对象或变量,没有及时清理,也会照成一定的安全问题。
1. c++利用构造函数和析构函数解决上述问题,这两个函数都会被编译器自动调用,完成对象初始化和清理工作。
2. 对象的初始化和清理工作是编译器强制要我们去做的事情,因此如果我们不提供构造和析构函数,编译器会自动提供,编译器提供的构造和析构函数是空实现。
构造函数:主要作用在创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用。
构造函数替换set,例如:
#includeusing namespace std; class A { public: void setx(int a) { x=a; } private: int x; }; int main() { return 0; }
替换为:
#includeusing namespace std; class A { public: A(int a) { x=a; } private: int x; }; int main() { return 0; }
特点:
1)构造函数的名字与类名相同。
2)构造函数无返回值。
3)构造函数可以有多个参数(根据成员变量的数量)。
4)构造函数由系统自动调用,在创建对象的同时系统会自动调用构造函数。
注意:c++类中不是必须有默认构造函数,如果你自己实现了构造函数,就没有,如果没有实现构造函数,系统就默认加上一个默认构造函数。
构造函数调用规则如下:(1)如果用户定义有参构造函数,c++不再提供默认无参构造函数,但是会提供默认复制构造函数。
(2)如果用户定义了复制构造函数,c++不会提供其它(默认无参构造函数、有参构造函数)构造函数了。
析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。
析构函数:回收对象。
特点:
1)析构函数的名字是类名前加~。
2)析构函数没有返回值。
3)析构函数没有参数,只能定义一个。
4)在对象被回收时由系统自动调用。
例如:
#includeusing namespace std; class A { public: ~A() { } private: int x; }; int main() { return 0; }



