【C++入门:类和对象】[3]
C++入门:类和对象
拷贝构造(拷贝初始化)
拷贝构造是构造函数的重载
class Date
{
public:Date(int year=1,int month=1,int day=1)
{
_year=year;
_month=month;
_day=day;
}
Date(const Date& d)//(拷贝构造,把d1传参给d)引用传参不改变使用const
//注意使用&,不然会无穷递归(传值传参函数返回都规定要调用拷贝构造)
{
_year=d.year;
_month=d.month;
_day=d.day;
}
void Print()
{
cout<<_year<</<<_month<</<<_day<<endl;
}
private:
{
int _year=year;
int _month=month;
int _day=day;
}};
int main()
{
Date d1(2025,4,24);
Date d2(d1);
Date d3=d1;
}
需要自己写拷贝构造的情景
大部分拷贝构造不需要自己写
但是自定义类型需要自己写
不然只能浅拷贝(值拷贝)指向的空间相同(一个对象修改,会影响另外一个)
写拷贝构造可以深拷贝(指向的空间不同,新开辟空间,防止析构或者free两次)
…自定义类型不用写
运算符重载
1.当运算符用于类类型的对象时,要使用运算符重载,不然编译器会报错
2.运算符重载是有特殊名字的函数
3.一元运算符有一个参数,二元运算符有两个参数
bool operator==(Date& d1,Date& d2)//判断日期是否相同
{return d1._year=d2._year&&
d1._month=d2._month&&
d1._day=d2._day;
}
int operator-(Date& d1,Date& d2)
{return 0;
}