一种特殊类型的方法,在每次实例化对象时运行
2.代码举例 2.1 示例1:#includeclass A { public: float a, b; void print() { std::cout << a << " , " << b << std :: endl; } }; int main() { A a; a.print(); return 1; }
运行结果:
当我们实例化A,系统为它分配内存,我们没有初始化内存,得到的是内存空间原有的那些东西
2.2 示例2:当在main中添加 std::cout << a.a << " , " << a.b << std :: endl;
int main()
{
A a;
std::cout << a.a << " , " << a.b << std :: endl;
a.print();
return 1;
}
运行结果:
不同编译器可能不一样,有的会编译不过报错(未初始化局部变量),原因有待深入…
3. 使用 3.1 使用构造函数初始化#includeclass A { public: float a, b; A () { a = 0.0f; b = 0.0f; } void print() { std::cout << a << " , " << b << std :: endl; } }; int main() { A a; std::cout << a.a << " , " << a.b << std :: endl; a.print(); return 1; }
结果:
3.2 有参数的构造函数#includeclass A { public: float a, b; // 无参构造 A () { a = 0.0f; b = 0.0f; } // 有参构造 A(float c,float d) { a = c; b = d; } void print() { std::cout << a << " , " << b << std :: endl; } }; int main() { A a(5.0,6.0); std::cout << a.a << " , " << a.b << std :: endl; a.print(); return 1; }
一个类可以有很多构造函数 前提是参数个数不同或者参数类型不同
类似于同名函数(函数重载 即有相同的函数名,但是有不同的参数个数与参数类型)
A(float c,float d)
{
}
A(int c,int d)
{
}
A(float c,float d,float e)
{
}
这里需要注意有参构造的时候注意传值类型
如 float 类型
A a(5.0f , 6.0f);3.3 默认的构造函数
每个类默认有一个空参空实体的构造函数(如果写了构造函数,则默认构造函数就没有了,需要时需手动添加)
A ()
{
}
如果不想使用构造函数有两种方法
// 1 私有化
private :
A(){}
// 2 删掉
A() = delete;
4. 特殊的构造函数
拷贝构造函数(复制构造函数)
移动构造函数



