类与对象(中--构造函数)
- 1、构造函数的特性
- 2、默认构造函数
- 3、编译器自动生成的默认构造函数(无参的)(当我们不写构造函数时)
- 3.1 编译器自动生成的默认构造函数只对 自定义类型的成员变量 起作用,对 内置类型的成员变量 不做处理
- 3.2 针对编译器自动生成的默认构造函数,无法对内置类型成员变量进行初始化的缺陷
- 4、总结是否在类中写构造函数
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;
}