目录
If there is nothing in class, it is an empty class.
here I mainly discuss four: initialization and cleanup, constructor(构造) and destructor(析构), cope and assignment, copy constructor(拷贝构造) and assignment Overloading(赋值重载)
构造函数是一个特殊的成员函数,名字和类名相同,在创建的时候自动调用,贰仟在整个生命周期中只会调用一次。
特性:构造函数不是去创建新的对象,而是初始化对象。
对象开空间都是静态开辟,不归我们管,而是在一开始的栈就创建好了
特质:
1.函数名与类名相同
2.无返回值(连void都不用写)
3.对象实例化的时候编译器自动调佣对应的构造函数
4.构造函数可以重载
无参构造函数
A()//no parameter construtor
{
_year = 1;
_month = 1;
_day = 1;
}
在创建的时候只要A a就行了,无参的连括号都不需要
带参构造函数
A(int year, int month, int day)//parameterized constructor { _year = year; //this->_month = month; _month = month; _day = day; }
全缺省函数
A(int year=1, int month=1, int day=1)//all default function
{
_year = year;
//this->_month = month;
_month = month;
_day = day;
}
注意全缺省函数和无参函数不能同时存在,不然会出线调用歧义
如果类中没有显示的定义的函数,那么编译器会自动生成一个无参的构造函数,一点用户定义了就不会再生成。
c++的类型:
c++中把类型分为内置类型和自定义类型,内置类型就是语言直接提供的可惜
大多数情况下我们要自己写,因为内置类型和要传参的时候不能自动生成
早期内置类型都不会去处理,对自义定类型则会调用其原始的默认构造函数,如果报错则要自己写
内置类型在声明的时候可以给默认值
默认构造函数:
无参构造函数和全缺省函数还有编译器默认生成的函数都被称为没人构造函数:可以简单理解为不传参数就可以使用的是默认构造函数
析构函数
与构造函数相似,析构函数不是去销毁对象的本身,局部对象的销毁是有编译器完成的,而是为了对象中的清理工作,当然有些类不需要清理,则不需要析构函数
特征
1.析构函数是在类名前加上~
~Stack()
{
free(_a);
_a = nullptr;
_capacity = _top = 0;
}
2.析构函数无参数无返回类型(所以就无法重载)
3.一个类只有一个析构函数,如果未写的话,系统就会生成默认的析构函数
4.对象声明周期结束的时候会自动调用析构函数
如果不写的话,会对内置类型不做处理,有资源申请的类要去写析构函数
看类里面成员变量的小技巧
可以直接去查看this指针
析构的顺序
是后定义的先析构,好像是栈里面一样
Init在在c语言里面未写的时候会报错,但是如果没写destroy会报错,在c++里面的话可能会内存泄露,所以本贾尼设计了自动调用
赋值运算符重载
在c++里面引入了运算符重载