定义Point类,有坐标x,y两个成员变量;对Point类重载“++”(自增)、“--”(自减)运算符,实现对坐标值的改变。

多态与重载

定义Point类,有坐标x,y两个成员变量;对Point类重载“++”(自增)、“--”(自减)运算符,实现对坐标值的改变。

源代码:

#include<iostream>
using namespace std;
class Point {
public:
	Point(int a, int b) { x = a; y = b; }
	int getx() const { return x; }
	int gety() const { return y; }
	Point &operator++();
	Point &operator--();
	Point &operator++(int);
	Point &operator--(int);
	void play();
protected:
	int x, y;
};
Point &Point::operator++()
{
	++x;
	++y;
	return *this;
}
Point &Point::operator--()
{
	--x;
	--y;
	return *this;
}
Point& Point::operator++(int)
{
	x++;
	y++;
	return *this;
}
Point& Point::operator--(int)
{
	x--;
	y--;
	return *this;
}
void Point::play()
{
	cout << " x=" << x << ", y=" << y << endl;
}
int main()
{
	Point p(3, 5);
	cout << "x=" << p.getx() << ", y=" << p.gety() << endl;
	cout << "前置++:";
	++p;
	p.play();
	cout << "后置++:" ;
	p++;
	p.play();
	cout << "前置--:" ;
	--p;
	p.play();
	cout << "后置--:" ;
	p--;
	p.play();
	return 0;		
}

结果:

 

 

  • 22
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
C++上机实验报告-实验六全文共11页,当前为第1页。C++上机实验报告-实验六全文共11页,当前为第1页。实验六 多态性 C++上机实验报告-实验六全文共11页,当前为第1页。 C++上机实验报告-实验六全文共11页,当前为第1页。 实验目的 1.掌握运算符重载的方法 2.学习使用虚函数实现动态多态性 实验要求 1.定义Point类,有坐标_x,_y两个成员变量;对Point重载"++"(自)、"――"(自)运算符实现对坐标值改变。 2.定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。 3. (选做)对实验4中的People类重载"=="运算符和"="运算符,"=="运算符判断两个people类对象的id属性是否相等;"="运算符实现People类对象的赋值操作。 实验内容及实验步骤 1.编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现Point重载"++"(自)运算符定义成员函数Point& operator--();Point operator--(int);以实现Point重载"--"(自)运算符实现对坐标值改变。程序名:1ab8_1.cpp。 2.编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。 思考题 如何将一个运算符重载为类的成员函数? 函数类型 operator 运算符(形参表) { 函数体; } 如何将一个运算符重载为类的友元函数? friend 函数类型 operator 运算符(形参表) { 函数体; } 3.如何实现运行时刻的多态? 在基类的成员函数前加上virtual,就可以在它的派生类中声明相同名字和类型的成员函数,在运行过程中,系统会自动判断并调用相应类中的成员函数,从而在调用过程中实现多态。 源程序 lab8_1.cpp #include<iostream> C++上机实验报告-实验六全文共11页,当前为第2页。C++上机实验报告-实验六全文共11页,当前为第2页。using namespace std; C++上机实验报告-实验六全文共11页,当前为第2页。 C++上机实验报告-实验六全文共11页,当前为第2页。 class Point { private: int _x; int _y; public: //构造.析构函数 Point(){} Point(int,int); ~Point(){} //++.--重载 Point& operator ++(); Point operator ++(int); Point& operator --(); Point operator --(int); //输出点坐标 void showPoint(); }; Point::Point(int x,int y) { _x=x; _y=y; } Point& Point::operator ++() { _x++; _y++; return *this; } Point Point::operator ++(int) { Point p=*this; ++(*this); return p; } Point& Point::operator --() { _x--; _y--; return *this; } Point Point::operator --(int) { C++上机实验报告-实验六全文共11页,当前为第3页。C++上机实验报告-实验六全文共11页,当前为第3页。 Point p=*this; C++上机实验报告-实验六全文共11页,当前为第3页。 C++上机实验报告-实验六全文共11页,当前为第3页。 --(*this); return p; } void Point::showPoint() { cout<<"The point is ("
### 回答1: 以下是Point类的实现,包括自、自运算符重载: ```c++ class Point { private: int _x; int _y; public: // 构造函数 Point(int x = 0, int y = 0) : _x(x), _y(y) {} // 自运算符重载 Point& operator++() { _x++; _y++; return *this; } // 自运算符重载 Point& operator--() { _x--; _y--; return *this; } // 输出运算符重载 friend std::ostream& operator<<(std::ostream& os, const Point& p) { os << "(" << p._x << ", " << p._y << ")"; return os; } }; ``` 在上面的实现中,我们使用了前置自、自运算符进行重载。这里需要注意,在自、自运算符实现中,我们需要返回一个引用,这样才能保证在进行连续的自、自操作时,每次操作都是在原有对象的基础上进行的。同时,我们还重载了输出运算符,以便于输出Point对象的坐标值。 下面是一个使用Point类的示例: ```c++ int main() { Point p(1, 2); std::cout << "p = " << p << std::endl; ++p; std::cout << "++p = " << p << std::endl; --p; std::cout << "--p = " << p << std::endl; return 0; } ``` 输出结果为: ``` p = (1, 2) ++p = (2, 3) --p = (1, 2) ``` 可以看到,通过自、自运算符重载,我们成功地改变Point对象的坐标值。 ### 回答2: Point类的定义如下: ```cpp class Point { private: int _x; int _y; public: Point(int x, int y) : _x(x), _y(y) {} Point& operator++() { // 重载前置自运算符 _x++; _y++; return *this; } Point& operator--() { // 重载前置自运算符 _x--; _y--; return *this; } }; ``` 这是一个简单的Point类,具有两个私有的成员变量`_x`和`_y`表示坐标的x轴和y轴分量。我们通过构造函数来初始化这两个成员变量。 然后,我们重载了前置版本的自运算符和自运算符。在前置自运算符`++`中,我们将`_x`和`_y`分别加1,并返回`this`指针以支持链式操作。同样地,在前置自运算符`--`中,我们将`_x`和`_y`分别少1,也返回`this`指针。 这样,我们就能够通过对Point对象使用`++`和`--`运算符改变坐标值了,例如: ```cpp Point p(1, 1); ++p; // 坐标变为 (2, 2) --p; // 坐标变为 (1, 1) ``` ### 回答3: Point类是定义一个点的类,包含两个成员变量:_x和_y,用来表示点的坐标值。 为了实现对坐标值改变,我们可以重载运算符“++”和自运算符--”。 重载运算符“++”时,我们可以让_x和_y的值加1,表示向右移动一个单位。 重载运算符--”时,我们则可以让_x和_y的值1,表示向左移动一个单位。 通过重载这两个运算符,我们可以方便地对Point对象的坐标值进行调整。 下面是Point类的示例代码: ```cpp class Point { public: Point(int x, int y) : _x(x), _y(y) {} // 重载运算符++ Point& operator++() { _x++; _y++; return *this; } // 重载运算符-- Point& operator--() { _x--; _y--; return *this; } private: int _x; int _y; }; ``` 通过上面的代码,我们可以使用自运算符“++”和自运算符--”来对Point对象的坐标进行改变,例如: ```cpp int main() { Point p(1, 1); ++p; // 将坐标向右移动一个单位 --p; // 将坐标向左移动一个单位 return 0; } ``` 这样,Point类就可以方便地对坐标值进行改变了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值