网站建设与管理自考,wordpress集成后台无法登录,辽宁网站制作公司,微信网站怎样做文章目录 1.运算符重载(1)(2)运算符重载的语法#xff1a;(3)运算符重载的注意事项#xff1a;(4)前置和后置重载区别 2.const成员函数3.取地址及const取地址操作符重载4.总结 1.运算符重载
(1)
我们知道内置类型(整形#xff0c;字符型#xff0c;浮点型…)可以进行一系… 文章目录 1.运算符重载(1)(2)运算符重载的语法(3)运算符重载的注意事项(4)前置和后置重载区别 2.const成员函数3.取地址及const取地址操作符重载4.总结 1.运算符重载
(1)
我们知道内置类型(整形字符型浮点型…)可以进行一系列的加减乘除运算那么我们自定义的类型可以像内置类型一样加减乘除运算吗那么我们来实践看看吧毕竟是实践出真理嘛。
#include iostream
using namespace std;
class Date
{
public:Date(int year0,int month0,int day1){_year year;_month month;_day day;}private:int _year;//这里命名加_是为了和形参区别开来int _month;int _day;
};
int main()
{Date d1;Date d2;d1 d2;return 0;
}我们可以看看这个代码看看d1d2能否进行运算。 直接就报错了由此证明自定义类型是不能直接进行运算的其实内置类型也是由那些大牛们在标准库里面为我们实现好了内置类型的运算所有我们可以直接使用内置类型的运算。那么我们该如何做才能让自定义类型像内置类型一样进行运算呢其实我们可以用运算符重载就可以实现该功能。由此引出了运算符重载。
(2)运算符重载的语法
返回类型operator需要重载的运算符的符号(参数) 注意一般运算符重载的参数是为一个 运算符重载的例子
bool operator(const Date d2)
{return _year d2._year _month d2._month _day d2._day;
}(3)运算符重载的注意事项
(1)不能通过连接其他符号创建不存在的运算符例如operator (2)重载操作符必须有一个类类型的参数一般是this指针 (3)内置类型的运算符不能修改 (4).* :: sizeof ?: .这五个运算符不能进行重载 (5)赋值运算符重载也可能会出现浅拷贝问题(这个不理解可以去看看我上篇博客)
(4)前置和后置重载区别
#include iostream
using namespace std;
class Date
{
public:Date(int year0,int month0,int day1){_year year;_month month;_day day;}//前置返回1之后的结果//this出了作用域不会被销毁所以使用引用返回提高效率Date operator(){_day 1;return *this;}//后置返回1之前的结果//tmp是临时对象出了作用域就不存在了所以使用值返回Date operator(int)//这里为什么又int呢是为了和前置区别开来{Date tmp (*this);_day 1;return tmp;}private:int _year;//这里命名加_是为了和形参区别开来C规定后置重载时多增加一个int类型的参数但调用函数时该参数不用传递编译器自动传递int _month;int _day;
};int main()
{Date d1(1999,1,1);Date d2d1;Date d3d1;return 0;
}2.const成员函数
(1)定义const修饰的成员函数叫const成员函数const修饰成员函数实际是修饰成员函数的this指针const修饰该成员函数表示该成员函数不能对类的任何成员进行修改。 编译器对const成员的处理
3.取地址及const取地址操作符重载
这两个函数一般不用重新定义编译器会默认生成
Date* operator()
{return this;
}//返回值也只能是const
const Date* operator() const
{return this;
}4.总结
6个默认成员函数到这里已经总结完了这6个默认成员函数分别是构造函数拷贝构造析构函数赋值运算符重载const成员函数和const 函数