C++上机实验报告实验六

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p[t].enter();
}
for(t=0;t<2;t++) //输出对象数组成员信息
{
cout<<"\n第"<<t+1<<"个人员信息如下:"<<endl;
p[t].show();
}
people p3; //定义people类的对象p3
p3-p[1]; //使用重载运算符将p[1]赋给p3
cout<<"\n第3个人员信息如下:"<<endl;
Point&operator--();
Point operator--(int);
void Show();
private:
int _x; //私有数据成员
i百度文库t _y;
};
Point::Point(){ //Point类构造函数
_x=0;_y=0;}
Point::Point(int x,int y) //Point类构造函数
{
public:
void Run(){cout<<"The motorcycle is running!"<<endl;}
void Stop(){cout<<"The motorcycle has stopped!"<<endl;}
};
int main()
{
vehicle a; //定义vehicle类的一个对象a
class Birthday{
public:
Birthday(int Year,int Month,int Day); //构造函数
Birthday(){} //构造函数
~Birthday(){} //析构函数
Birthday(Birthday &p); //复制构造函数
int showBirthday(){
{
if(id==V.id)
{
cout<<" have the same id! "<<endl;
}
else
{cout<<" have different id!"<<endl;}
}
people people::operator-(people &U) //重载-运算符成员函数
{
number=U.number; //使用字符串赋值运算符
++(this->_y);
return old;
}
Point & Point::operator--() //重载后置--运算符为Point类成员函数
{
_x--;
_y--;
}
Point Point::operator--(int) //重载前置--运算符为Point类成员函数
{
Point old=*this;
}
Birthday::Birthday(int Year,int Month,int Day) //Birthday类构造函数
{
year=Year;
month=Month;
day=Day;
}
int Birthday::enter(){
cout<<"生日:";
cin>>year>>month>>day;
程序名:lab8_2.cpp
#include <iostream>
using namespace std;
class vehicle //基类vehicle
{
public:
vehicle(){}
~vehicle(){}
virtual void Run(){cout<<"The vehicle is running!"<<endl;} //定义虚函数Run()
}
运行结果:
3. (选做)对实验4中的People类重载“==”运算符和“-”运算符,“==”运算符判断两个people类对象的id属性是否相等;“-”运算符实现People类对象的赋值操作。
源程序:
#include <iostream>
#include <string>
using namespace std;
c.Run();
c.Stop();
d.Run();
d.Stop();
p=&a; //使指针p指向vehicle类对象a
p->Run(); //通过指针调用vehicle类成员函数
p->Stop();
p=&b; //使指针p指向bicycle类对象b
p->Run(); //通过指针调用bicycle类成员函数
cout<<" 生日 ";
p1.showBirthday(); //调用Birthday类成员函数
cout<<" 身份证号 "<<id<<endl;
}
int people::enter(){
p1.enter();
cout<<"性别:";
cin>>sex;
cout<<"编号:";
cin>>number;
#include <iostream>
using namespace std;
class Point
{
public:
Point();
Point(int x,int y);
~Point(){} //Point类析构函数
Point& operator++(); //公有成员函数
Point operator++(int);
cout<<"身份证号:";
cin>>id;
}
people::people(people &p):p1(p.p1) //people类复制构造函数
{
number=p.number;
sex=p.sex;
id=p.id;
}
people people::operator==(people &V) //重载==运算符成员函数
sex=U.sex;
id=U.id;
p1=U.p1;
return *this; //返回this指针
}
int main()
{
int t;
people p[2]; //定义对象数组p[2]
for(t=0;t<2;t++) //输入对象数组成员信息
{
cout<<"输入第"<<t+1<<"个人员的信息"<<endl;
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
cout<<year<<"年"<<month<<"月"<<day<<"日";} //内联成员函数
int enter();
private:
int year,month,day;
};
Birthday::Birthday(Birthday &p){
year=p.year;
month=p.month;
day=p.day;
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等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。
{
_x=x;
_y=y;
}
Point & Point::operator++() //重载后置++运算符为Point类成员函数
{
_x++;
_y++;
}
Point Point::operator++(int) //重载前置++运算符为Point类成员函数
{
Point old=*this;
++(this->_x);
}
class people{ //定义people类
public:
people(){} //people类构造函数
~people(){} //people类析构函数
people(people &p);
people operator==(people &);
people operator-(people &);
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(";
--(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
virtual void Stop(){cout<<"The vehicle has stopped!"<<endl;} //定义虚函数Stop()
};
class bicycle: virtual public vehicle //定义派生类bicycle,声明基类为派生类的虚基类
{
public:
void Run(){cout<<"The bicycle is running!"<<endl;}
void Run(){cout<<"The motorcar is running!"<<endl;}
void Stop(){cout<<"The motorcar has stopped!"<<endl;}
motorcar(){}
~motorcar(){}
};
class motorcycle:public bicycle,public motorcar //以bicycle类和motorcar类作为基类派生新类motorcycle
p->Stop();
p=&c; //使指针p指向motorcar类对象c
p->Run(); //通过指针调用motorcar类成员函数
p->Stop();
p=&d; //使指针指向motorbicycle类对象d
p->Run(); //通过指针调用motorcycle类成员函数
p->Stop();
return 0;
int show();
int enter();
private:
string number,id,sex; //字符串类型变量数据成员
Birthday p1; //Birthday类数据成员
};
int people::show()
{
cout<<"\n性别 "<<sex<<" 编号 ";
cout<<number;
vehicle *p; //定义一个vehicle类的指针
bicycle b; //定义bicycle类的对象b
motorcar c; //定义motorcar类的对象c
motorcycle d; //定义motorcycle类的对象d
a.Run();
a.Stop();
b.Run();
b.Stop();
void Stop(){cout<<"The bicycle has stopped!"<<endl;}
bicycle(){}
~bicycle(){}
};
class motorcar: virtual public vehicle //定义派生类motorcar,声明基类为派生类的虚基类
{
public:
实验六
实验目的
1.掌握运算符重载的方法
2.学习使用虚函数实现动态多态性
实验要求
1.定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。
2.定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。
相关文档
最新文档