c++第五次作业
c++
运算符重载
引言:多态性是指同样的消息被不同类型的对象接受时会导致不同的行为。它可以分为:重载多态、强制多态、包含多态和参数多态。
编译和运行时都可以产生多态,前者是编译中确定同名操作的具体操作对象,后者为程序运行中动态地确定操作所针对的具体对象。分两种情况:
前置++:即++运算符位于操作数的前面,例如:++i
后置++:即++运算符位于操作数后面, 例如:i++
c++语言并不要求递增和递减运算符必须是类的成员,但是因为它们改变的正好是所操作对象的状态,所以建议将其设定为成员函数。
下面的代码为了练习,还是分别采用成员函数和全局函数的方式实现:
include
using namespace std;
class Test {
friend Test & operator--(Test &obj);
friend Test operator--(Test &obj, int);
public:
Test(int a = 0, int b = 0)
{
this->a = a;
this->b = b;
}
void display()
{
cout << "a:" << a << " b:" << b << endl;
}
public:
//前置++
Test & operator++()
{
this->a++;
this->b++;
return *this;
}
//后置++
Test operator++(int)
{
Test temp = *this;
this->a++;
this->b++;
return temp;
}
private:
int a;
int b;
};
//前置--
Test & operator--(Test &obj)
{
obj.a--;
obj.b--;
return obj;
}
//后置--
Test operator--(Test &obj,int)
{
Test temp = obj;
obj.a--;
obj.b--;
return temp;
}
int main()
{
Test t1(1, 2);
t1.display();
++t1;
t1.display();
--t1;
t1.display();
Test t2(3, 4);
t2.display();
t2++;
t2.display();
t2--;
t2.display();
cout << "hello world!\n";
return 0;
}
注意一下几点:
前置++重载时没有参数,而后置++重载时有参数。不会使用其参数,仅仅是区分用。可以理解为前置++后面有参数了,所以不需要参数
前置++需要返回引用,因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。而后置++返回的不是引用,所以不能进行连续使用。
include
using namespace std;
class point
{
public:
point(int a, int b):x(a), y(b){}
point& operator++() // 前置++
{
x++;
y++;
return *this;
}
point operator++(int) //后置++
{
point a = *this;
// 或者++a;
a.x++;
a.y++;
return a;
}
private:
int x;
int y;
};