当前位置:文档之家› 东北大学C++实验报告6

东北大学C++实验报告6

实验六
1.实验要求
(1)定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。

(2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。

观察虚函数的作用。

2. 实验内容及实验步骤
(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。

3. 源程序
Lab8_1
#include<iostream>
using namespace std;
class Point{
public:
Point(int X,int Y): _x(X),_y(Y){}
Point operator++();
Point operator++(int);
Point operator--();
Point operator--(int);
void Putout() const;
private:
int _x,_y;
};
void Point::Putout() const{
cout<<"("<<_x<<","<<_y<<")"<<endl; }
Point Point:: operator++(){
_x++;
_y++;
return *this;
}
Point Point::operator++(int){
++_x;++_y;
return *this;
}
Point Point::operator--(){
_x--;
_y--;
return *this;
}
Point Point::operator--(int){
--_x;
--_y;
return *this;
}
int main(){
Point A(6,7);
cout<<"Point++: ";
(A++).Putout();
cout<<"++Point: ";
(++A).Putout();
cout<<"Point--: ";
(A--).Putout();
cout<<"--Point: ";
(--A).Putout();
return 0;
}
运行结果
Lab8_2
1)在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数。

#include<iostream>
using namespace std;
class Vehicle{
public:
void Run(){cout<<"基类Vehicle的Run函数调用"<<endl;}
void Stop(){cout<<"基类Vehicle的Stop函数调用"<<endl;}
};
class bicycle :public Vehicle
{
public:
void Run(){cout<<"派生类bicycle的Run函数调用"<<endl;}
void Stop(){cout<<"派生类bicycle的Stop函数调用"<<endl;}
};
class motorcar :public Vehicle
{
public:
void Run(){cout<<"派生类motorcar的Run函数调用"<<endl;}
void Stop(){cout<<"派生类motorcar的Stop函数调用"<<endl;}
};
class motorcycle :public bicycle,public motorcar
{
public:
void Run(){cout<<"派生类motorcycle的Run函数调用"<<endl;}
void Stop(){cout<<"派生类motorcycle的Stop函数调用"<<endl;}
};
int main(){
Vehicle V;
bicycle B;
motorcar M;
motorcycle Mc;
V.Run(); V.Stop();
B.Run(); B.Stop();
M.Run(); M.Stop();
Mc.Run(); Mc.Stop();
return 0;
}
运行结果
2)用vehicle类型的指针来调用这几个对象的成员函数。

#include<iostream>
using namespace std;
class Vehicle{
public:
virtual void Run(){cout<<"基类Vehicle的Run函数调用"<<endl;} virtual void Stop(){cout<<"基类Vehicle的Stop函数调用"<<endl;} };
class bicycle :virtual public Vehicle
{
public:
void Run(){cout<<"派生类bicycle的Run函数调用"<<endl;}
void Stop(){cout<<"派生类bicycle的Stop函数调用"<<endl;} };
class motorcar :virtual public Vehicle
{
public:
void Run(){cout<<"派生类motorcar的Run函数调用"<<endl;}
void Stop(){cout<<"派生类motorcar的Stop函数调用"<<endl;} };
class motorcycle :public bicycle,public motorcar
{
public:
void Run(){cout<<"派生类motorcycle的Run函数调用"<<endl;} void Stop(){cout<<"派生类motorcycle的Stop函数调用"<<endl;} };
void fun(Vehicle *p){
p->Run();
p->Stop();
}
int main(){
Vehicle V;
bicycle B;
motorcar M;
motorcycle Mc;
fun(&V);
fun(&B);
fun(&M);
fun(&Mc);
return 0;
}
运行结果
4.思考题
(1).函数类型operator 运算符(形参表)
{
函数体;
}
(2). friend 函数类型operator 运算符(形参表)
{
函数体;
}
(3).通过指向基类类型的指针和引用来调用对象的虚函数来实现。

相关主题