![01d8133f9a01ccd7ff5438a8f14cb0ed.png](https://img-blog.csdnimg.cn/img_convert/01d8133f9a01ccd7ff5438a8f14cb0ed.png)
https://liukanshan.zhihu.com/comics 【知乎刘看山的小站】之前都没有发现
构造函数的任务是初始化类对象的数据成员,除了定义类的对象如何初始化之外,类还需要控制拷贝、赋值、销毁,后续会继续总结与介绍,本篇主要介绍构造函数的相关内容。
一、定义
#include <iostream>
using namespace std;
class Foo
{
int y;int v;int w;int z;
public:
Foo(int y= 0, int v = 0) :y(y), v(v) {};//默认构造函数
Foo(int y, int v = 0, int w = 0, int z = 0) :y(y), v(v), w(w), z(z) {};//自定义构造函数
};
int main()
{
Foo obj;//调用默认构造函数
Foo obj2(6);//报错,指代不明,不知道调用哪个构造函数
Foo obj3(6, 4, 6);//调用自定义构造函数
}
自定义的构造函数中有默认值的形参后面不能还有没有默认值的形参,有默认值的放在后面。
Foo(int y, int v = 0, int w = 0, int z = 0) :y(y), v(v), w(w), z(z) {};//自定义构造函数
默认构造函数:无形参或者或者形参均有默认值的构造函数都是默认构造函数
Foo() {};//默认构造函数
Foo(int y = 0, int v = 0) :y(y), v(v) {};//默认构造函数
自定义了构造函数,编译器不会生成默认构造函数,需要默认构造函数初始化对象会报错
#include <iostream>
using namespace std;
class Foo
{
int y;int v;int w;int z;
public:
//Foo() {};
//Foo(int y = 0, int v = 0) :y(y), v(v) {};
Foo(int y, int v = 0, int w = 0, int z = 0) :y(y), v(v), w(w), z(z) {};
};
int main()
{
Foo obj;//报错,无合适的构造函数,需要默认构造函数来初始化,但是不存在
return 0;
}
写着写着发现没什么写了...
二、参考
C++Primer p262
https://en.cppreference.com/w/cpp/language/default_constructor
https://blog.csdn.net/china_jeffery/article/details/79288103?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase