当前位置:   article > 正文

大一下 c + + 上机实验总结(十二)_编写一个程序,假设图书馆的图书包含书名、编号和作者等3个属性,读者包含姓名和借

编写一个程序,假设图书馆的图书包含书名、编号和作者等3个属性,读者包含姓名和借

大一下c + +上机实验总目录:大一下c + +上机实验总结目录


1、假设图书馆的图书包含书名、编号和作者属性,读者包含姓名和借书证号属性,每个读者最多可借5本书。设计一个类object,从它派生出图书类book和读者类reader,在reader类中有一个rentbook()成员函数用于借阅图书。主函数进行测试。说明:这是一个简单的借阅过程。借阅时,假设要借阅的图书是存在的。

提示:(1)在基类object中定义字符数组(或string类型)的name和整型数据no,这两个数据成员被book类继承后,用于表示书名和编号,这两个数据成员被reader类继承后,用于表示读者姓名和借书证号;(2)book类新增数据成员:作者(字符数组或string类型);reader类新增数据成员:目前借书的数量(整型)top、所借图书的信息(可定义成book类对象数组,book rent[5]);(3)reader类中的成员函数rentbook()的形参可以设置为book类对象的引用,主函数中每调用一次rentbook(),表示借阅一本书,所以rentbook()函数体代码:{rent[top]=b; top++;}。
参考答案:

#include<iostream.h>
#include<string.h>
class object{
	 char name[20];
	 int no;
public:
	object(){}
	object(char na[],int n)
	{strcpy(name,na);no=n;
	}
	void show();
	
};
void object::show()
	{cout<<name<<"("<<no<<")";
	}

class book:public object{
	char author[10];
public:
	book(){}
	book(char na[],int n,char auth[]):object(na,n)
	{strcpy(author,auth);
	}
	void showbook();

};
void book::showbook()
	{show();
	 cout<<"作者:"<<author;
	}

class reader:public object{
	book rent[5];
	int top;
public:
	reader(char na[],int n):object(na,n){top=0;}
	void rentbook(book &b);
	
    void showreader();
	
};
void reader::rentbook(book &b)
	{rent[top]=b;
	 top++;
	}
void reader::returnbook(book &b)
	{ top--;
	}
void reader::showreader()
	{cout<<"读者:";
	 show();
	 cout<<endl<<"所借图书:"<<endl;
	 for(int i=0;i<top;i++)
	 {cout<<"     "<<i+1<<":";//5个空格
	  rent[i].showbook();
	  cout<<endl;
	 }
	}
void main()
{book b1("C语言",100,"谭浩强"),b2("数据结构",110,"严蔚敏");
reader r1("张山",6666);
r1.rentbook(b1);
r1.rentbook(b2);
r1.showreader();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

2、
定义一个基类person
姓名、性别、年龄(访问权限设置为保护)
定义带参的构造函数(类中只包含该构造函数)
重载<<运算符,显示person的信息
重载>>运算符,输入person的相关信息
再由基类派生出学生类
增加学号、班级、专业和入学成绩
是否要定义构造函数?
重载<<运算符,显示student的信息(友元关系是不能继承的)
重载>>运算符,输入student的相关信息
参考答案:

#include<iostream>
#include <string>
using namespace std;
class Person
{
protected:
	string name;
	int age;
	string sex;
public:
    Person(string name="", int age=0, string sex="")    {
        this->name=name;        this->age=age;        this->sex=sex;    }
    friend istream &operator >>(istream &in, Person & p);
    friend ostream& operator <<(ostream &out, Person &p);
};
istream &operator >>(istream &in, Person & p)	{
    cout<<"name\tage\tsex"<<endl;
    in>>p.name>>p.age>>p.sex;
    return in;
}
ostream& operator <<(ostream &out, Person &p) {
    out<<p.name<<"  "<<p.age<<"  "<<p.sex<<endl;
	return out;
}
class student :public Person{
	string no;
	string zhuanye;
	string t_class;
	float score;
public:
    student(string name="",int age=0,string sex="",string no="",string zhuanye="", string t_class="", float score=0):Person(name,age,sex)
    {
        this->no=no;
        this->zhuanye=zhuanye;
        this->t_class=t_class;
        this->score=score;
    }
    friend istream & operator >>(istream & in , student & s);
    friend ostream & operator <<(ostream & out, student & s);
};
istream & operator >>(istream & in , student & s){   
    cout<<"no\tname\tage\tsex\tzhuanye\tt_class\tscore"<<endl;
    in>>s.no>>s.name>>s.age>>s.sex;
    in>>s.zhuanye>>s.t_class>>s.score;
    return in;
}
ostream & operator <<(ostream & out, student & s)	{
	out<<s.no<<"  "<<s.name<<"  "<<s.age<<"  "<<s.sex<<"    ";
	out<<s.zhuanye<<"  "<<s.t_class<<"  "<<s.score<<endl;
	return out;
}
int main()//用做测试的主函数,可以自己任意编写
{
student t1,t2;
cin>>t1>>t2;
cout<<t1<<endl<<t2<<endl;
return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

3、根据下列描述,编写程序,要求在主函数中测试以下行为:父亲开车;母亲唱歌、在外打工;孩子开车、唱歌和打篮球。具体描述如下:
三口之家,每个人都有姓名,身份证号,出生日期。
父亲会开车。会修电视(只有家里人知道)。
母亲会唱歌。母亲瞒着任何人在外打工。
小孩会开车,唱歌,修电视,此外,小孩还会打球。
提示:采用虚继承。定义一个Person类,为虚基类。从Person类派生出Father类和Mother类,由Father类和Mother类共同派生出Child类。
参考答案:

class Person
{
protected:
	string name;
	string id;
	Date birthday;
public:
	Person(int x,int y,int z,string a_name, string a_id):birthday(x,y,z),name(a_name),id(a_id)
	{
	}
	Person()
	{}
};
class Father:virtual public Person{
public :
    Father(int x,int y,int z,string a_name, string a_id):Person(x,y,z,a_name,a_id)	{}
     void Drive()	{
            cout<<name<<" is driving..............."<<endl;
     }
     Father()	{}
     friend class Mother;
protected:
    void RepairTV()	{
        cout<<name<<" is repairing TV set.........."<<endl;
    }
};
class Mother:virtual public Person{
public:
      Mother(int x,int y,int z,string a_name, string a_id):Person(x,y,z,a_name,a_id)	{	}
      Mother()	{}
      void Sing()	{
 	cout<<name<<"is singing....."<<endl;
      }
      friend void hourwork(Mother m);
private:
      void Work()	{
   	cout<<name<<" is working.........."<<endl;
     }
};
void hourwork(Mother m){
      m.Work ();
}
class Child:public Father,public Mother
{
public:
      Child(int x,int y,int z,string a_name, string a_id):Person(x,y,z,a_name,a_id) {}
      void PlayBasketBall()
     {
            cout<<name<<"is Play pingpong........"<<endl;
     }

};
int main()
{
	Father f(10,10,1967,"王小二","379008720123234");;
	Mother m(10,20,1970,"小龙女","3790070090983");
	Child c(2,12,1999,"王五","9800384340234");
	f.Drive();
	m.Sing();
	hourwork(m);
	c.PlayBasketBall ();
	c.Drive();
	c.Sing();
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

4、定义猫科动物Animal类,由其派生出猫类(Cat)和豹类(Leopard),二者都包含虚函数speak(),要求根据派生类对象的不同来调用各自重载后的成员函数。
参考答案:

#include<iostream.h>
class Animal{
public:
 virtual void Speak()=0;
};
class Cat:public Animal{
 void Speak()
 {cout<<"My name is Cat"<<endl;
 }
};
class Leopard:public Animal{
 void Speak()
 {cout<<"My name is Leopard"<<endl;
 }
};
int main()
{Animal *pa;
 Cat cat;
 pa=&cat;
 pa->Speak();
 Leopard leopard;
 pa=&leopard;
 pa->Speak();
 return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/556086
推荐阅读
相关标签
  

闽ICP备14008679号