OOP编程语言依赖构造函数,不同语言构造函数语法要求不太相同,但大同小异。构造函数和初始化函数很类似,看透了,就是类似C语言初始化一个结构体变量。
默认构造函数
- C++11之前,程序员增加新的带参数构造函数,必须手动编写空构造函数。C++11引入了default简化空构造函数实现。
- 例如 A() = default;
- 另外,还支持显式废弃构造函数,形如A() = delete指示编译器不要生成默认构造函数代码。
- 在C++中,explicit修饰构造函数可以避免隐式的数值和对象转换,但它并不限制如下形式的强制类型转换:
- Person p = (Person)12;
- C++98不允许explicit用于转换函数,C++11消除了这个限制。
构造函数和析构函数名称
- 大部分编程语言构造函数名称和类名相同,如C++/Java/C#等。
- Python不太一样,用__init__作为默认构造函数。
- PHP 用 __construct 作为构造函数名称,__destruct 作为析构函数。
- 仓颉 init代表构造函数。
拷贝构造函数和赋值构造函数
- C++是鲜有显式需要实现此二构造函数。
构造函数的重载
- C++/仓颉 等均支持构造函数的重载。
移动语义
- C++11引入移动语义std::move(),为配合右值引用而生,可节省对象构造拷贝开销。构造函数增加2个,分别是移动语义的拷贝构造函数和赋值构造函数。
类初始化器
- 仓颉 提供类静态初始化器,和类相关,与对象无关。例如: static init() { ... }
