运算符重载与虚函数实现动态多态性实例研究

版权申诉
0 下载量 161 浏览量 更新于2024-02-22 收藏 281KB DOCX 举报
类的成员函数 Point 类的构造函数、析构函数和运算符重载函数,完成对坐标值的改变。在主函数中定义 Point 对象,验证自增和自减运算符的重载效果。2.编写程序定义车(vehiele)基类,包括 Run、Stop 等成员函数,并由此派生出自行车(bicycle)类、汽车(motorcar)类,观察虚函数的作用。从 bicycle 和 motorcar 派生出摩托车(motorcycle)类,观察虚函数的继承效果。3.(选做)编写程序对实验 4 中的 People 类进行运算符重载,包括“==”运算符和“-”运算符,验证重载效果。 本次实验主要内容为运算符重载的方法和虚函数的使用。首先在第一部分实验中,通过定义 Point 类并重载自增和自减运算符来掌握运算符重载的方法。其次在第二部分实验中,通过定义车(vehiele)基类,并由此派生出自行车(bicycle)类、汽车(motorcar)类,以及从 bicycle 和 motorcar 派生出摩托车(motorcycle)类,来学习使用虚函数实现动态多态性。最后在选做的第三部分实验中,对实验 4 中的 People 类进行运算符重载,验证重载效果。 在实验过程中,首先按照实验要求定义了 Point 类,并实现了对坐标值的改变。在主函数中定义 Point 对象进行验证,验证了自增和自减运算符的重载效果。接下来按照要求定义了车(vehiele)基类,并由此派生出自行车(bicycle)类、汽车(motorcar)类,以及从 bicycle 和 motorcar 派生出摩托车(motorcycle)类,通过运行程序观察了虚函数的作用和继承效果。最后按照选做要求对实验 4 中的 People 类进行运算符重载,并验证了重载的效果。 通过本次实验,我对运算符重载的方法和虚函数的使用有了更深入的理解。通过实际编写程序并观察验证,加深了对这两个概念的理解和掌握。同时,也提高了对面向对象编程思想的理解,对多态性等概念有了更清晰的认识。通过本次实验,我掌握了运算符重载的方法,并进一步理解了虚函数的作用及继承效果,这对我今后的编程学习和实际应用都有很大的帮助。
2023-03-09 上传
实验六 实验目的 1.掌握运算符重载的方法 2.学习使用虚函数实现动态多态性 实验要求 1.定义Point类,有坐标_x,_y两个成员变量;对Point类重载"++"(自增)、"――"(自减 )运算符,实现对坐标值的改变。 2.定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类 、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有R un、Stop等成员函数。观察虚函数的作用。 3. (选做)对实验4中的People类重载"=="运算符和"-"运算符,"=="运算符判断两个p eople类对象的id属性是否相等;"-"运算符实现People类对象的赋值操作。 实验内容及实验步骤 编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载"++"(自增)运算符,定义成员函数Point& operator--();Point operator--(int);以实现对Point类重载"--"(自减)运算符,实现对坐标值的改变 。程序名:1ab8_1.Cpp #include <iostream> using namespace std; class Point { public: Point(); Point(int x,int y); ~Point(){} //Point类析构函数 Point& operator++(); //公有成员函数 Point operator++(int); Point&operator--(); Point operator--(int); void Show(); private: int _x; //私有数据成员 int _y; }; Point::Point(){ //Point类构造函数 _x=0;_y=0;} Point::Point(int x,int y) //Point类构造函数 { _x=x; _y=y; } Point & Point::operator++() //重载后置++运算符为Point类成员函数 { _x++; _y++; } Point Point::operator++(int) //重载前置++运算符为Point类成员函数 { Point old=*this; ++(this->_x); ++(this->_y); return old; } Point & Point::operator--() //重载后置--运算符为Point类成员函数 { _x--; _y--; } Point Point::operator--(int) //重载前置--运算符为Point类成员函数 { Point old=*this; --(this->_x); --(this->_y); return old; } void Point::Show() //输出Point的坐标值 { cout<<_x<<","<<_y<<")"<<endl; } int main() { Point a(2,3); //定义一个Point类对象a Point b=a++; //定义Point类对象b并用a++初始化b Point c=++a; //定义Point类对象c并用++a初始化c Point d=--a; //定义Point类对象d并用--a初始化d Point e=a--; //定义Point类对象e并用a--初始化e cout<<"Point a("; a.Show(); //输出a的坐标 cout<<"Point b("; b.Show(); //输出b的坐标 cout<<"Point c("; c.Show(); //输出c的坐标 cout<<"Point d("; d.Show(); //输出d的坐标 cout<<"Point e("; e.Show(); //输出e的坐标 return 0; } 运行结果: 2编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bi cycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它 们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、mot orcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的 指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试 看。 程序名:lab8_
2023-03-09 上传
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 ("