1、构造函数的特性
class Data
{
public:
Data()
{
}
Data(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Data d1;
Data d2(2023, 7, 31);
return 0;
}
2、默认构造函数
class Data
{
public:
Data(int year = 1, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Data d1;
Data(2022, 7);
Data d2(2023, 7, 31);
return 0;
}
3、编译器自动生成的默认构造函数(无参的)(当我们不写构造函数时)
class Data
{
public:
private:
int _year;
int _month;
int _day;
};
int main()
{
Data d1;
return 0;
}
3.1 编译器自动生成的默认构造函数只对 自定义类型的成员变量 起作用,对 内置类型的成员变量 不做处理
class Time
{
public:
Time()
{
cout << "Time()" << endl;
_hour = 0;
_minute = 0;
_second = 0;
}
private:
int _hour;
int _minute;
int _second;
};
class Data
{
public:
private:
int _year;
int _month;
int _day;
Time _t;
};
int main()
{
Data d1;
return 0;
}
3.2 针对编译器自动生成的默认构造函数,无法对内置类型成员变量进行初始化的缺陷
class Time
{
public:
Time()
{
cout << "Time()" << endl;
_hour = 0;
_minute = 0;
_second = 0;
}
private:
int _hour;
int _minute;
int _second;
};
class Data
{
public:
private:
int _year = 1;
int _month = 1;
int _day = 1;
Time _t;
};
int main()
{
Data d1;
return 0;
}
4、总结是否在类中写构造函数
#include <iostream>
#include <assert.h>
using namespace std;
typedef int DataType;
class Stack
{
public:
Stack(int capacity = 3)
{
_array = (DataType*)malloc(sizeof(DataType) * capacity);
assert(_array);
_capacity = capacity;
_size = 0;
}
private:
DataType* _array;
int _capacity;
int _size;
};
class MyQueue
{
public:
void push(int x) {}
private:
size_t _size = 0;
Stack _st1;
Stack _st2;
};
int main()
{
MyQueue q;
return 0;
}