类与对象 实验五 期末回顾

实验目录:点击打开链接

第一题

1、教材P242程序设计的第1

定义一个Book(图书)类,在该类定义中包括以下数据成员和成员函数。

数据成员:bookname(书名)、price(价格)和number(存书数量)。

成员函数:display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。

main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。

   

#include<bits/stdc++.h>
using namespace std;
class Book 
{
    string name;
    int price,num;
public:
    Book(string i,int j,int k)
    {
    	name=i;
    	price=j;
    	num=k;
    }
    int borrow()
    {
    	num--;
    	cout<<"当前存书数量:"<<num<<endl;
    }
     int restore()
    {
    	num++;
    	cout<<"当前存书数量:"<<num<<endl;
    }
    friend ostream&operator <<(ostream &out,Book &b)
    {
    	out<<"书名:"<<b.name<<"价格:"<<b.price<<"数目:"<<b.num<<endl;
    	return out;
    }
};
int main()
{
	Book b("c++",50,10);
	cout<<b;
	 cout << "请输入借阅或归还标志(b/r),n退出程序:";
	 char flag;
     while(cin >> flag)
	{
	  switch (flag)
      {
      case 'b':  b.borrow(); break;
      case 'r':  b.restore();break;
      case 'n': break;  
      }
      if(flag=='n')break;
	}
	return 0;
}

第二题

3、创建一个函数f1(),返回其参数的平方根。重载f1()三次,让它返回整数、长整数与双精度的平方根(计算平方根可以使用标准库函数sqrt()

#include<iostream>
#include<cmath>
using namespace std;
double f1(int x)
{return sqrt(x);}
double f1(long x)
{return sqrt(x);}
double f1(double x)
{return sqrt(x);}
int main()
{int a;
 long b;
 double c;
 cout<<"please input integer,long integer and double:";
 cin>>a>>b>>c;
 cout<<"result:";
 cout<<f1(a)<<" "<<f1(b)<<" "<<f1(c)<<endl;
}

第三题

4、建立一个Student类,含有私有的学号(字符型)、姓名(字符型)、年龄(整型)数据成员。用new自动为Student的对象分配内存,并将学号“0504020101”,姓名“张三”,年龄20存入内存的相应域中,把该生的信息显示出来。提示:用new创建对象并调用的是有参构造函数的格式为:类名  *指针变量=new 类名(实参1,实参2…);(根据自己掌握的情况,需要的话可借助课件复习此知识点)

自己的代码:

#include<bits/stdc++.h>
using namespace std;
class Student
{
   string id,name;
   int age;
public:
    Student(string i,string j,int k)
    {
    	id=i;
    	name=j;
    	age=k;
    }
    friend ostream&operator <<(ostream &out,Student &s)
    {
    	out<<"学号  姓名  年龄" <<endl;
    	out<<s.id<<"  "<<s.name<<" "<<s.age<<endl;
    }
   
};
int main()
{
	Student *s=new Student("2017","sdz",18);
	cout<<(*s)<<endl;
	 delete  s;
	return 0;
}

老师的代码的有知识点:

#include<iostream>
#include<cstring>
using namespace std;
class Student{
 char *num; //本程序为了让大家再熟悉一下在构造函数用new申请空间等的相关操作,这里定义num为字符指针类型,其实也可定义成字符数组或string类型
 char *name;//同上
 int age;
 public:
    Student(char *s,char *n,int a);
    void put();
    ~Student();
   };
 Student::Student(char *s,char *n,int a)
    {
        num=new char[strlen(s)+1];
        strcpy(num,s);
        name=new char[strlen(n)+1];
        strcpy(name,n);
        age=a;
    }
void Student::put()
    {
        cout<<"num:"<<num<<endl<<"name:"<<name<<endl<<"age:"<<age<<endl;
    }
Student::~Student()
    {if(!num)
       delete []num;
     if(!name)
        delete []name;
    }
int main()
{   Student *p=new Student("0504020101","zhangsan",20);
    p->put();
    delete p;
    return 0;
}



第四题

5、定义学生类,属性包括:学生姓名、语文成绩、数学成绩。完成:置学生信息、输出学生信息、求每个学生的平均成绩、求每个学生的总分、输出每个学生的平均成绩和总分。(要求用对象数组、构造函数完成)提示:考虑学生人数不定的情况,可用new建立动态对象数组(用new创建动态对象数组同用new创建其它数据类型的动态数组的操作相同)

#include<bits/stdc++.h>
using namespace std;
class Student
{
   string name;
   double c,m;
public:
   
    friend ostream&operator <<(ostream &out,Student &s)
    {
    	out<<"输出学生姓名、语文成绩、数学成绩" <<endl;
    	out<<s.name<<"  "<<s.c<<" "<<s.m<<endl;
    	return out;
    }
     friend istream&operator >>(istream &in,Student &s)
    {
    	cout<<"输入学生姓名、语文成绩、数学成绩" <<endl;
    	in>>s.name>>s.c>>s.m;
    	return in;
    }
    void out()
    {
     double sum,ave;
     sum=c+m;
     ave=sum/2;
     cout<<"总分"<<sum<<endl;	
     cout<<"平均成绩"<<ave<<endl;	
    }
};
int main()
{
	int n;	
	cout<<"输入学生人数" <<endl;
	cin>>n;

	Student *s=new Student[n];
	 for(int i=0;i<n;i++)
	 {
	 	cin>>s[i];
	 }
	for(int i=0;i<n;i++)
	 {
	 	cout<<i+1<<"个学生"<<endl;	
	 	s[i].out();
	 }
	delete []s ;
	return 0;
}

第四题

设计一个学校在册人员类,数据成员包括身份证号( id ,可定义成字符串类型)、姓名( name )、性别( sex )、生日( birth ,可定义成结构体类型)和家庭住址( homeadd )。成员函数包括人员信息的录入和显示,还包括构造函数和拷贝构造函数。在主函数中进行测试

#include<bits/stdc++.h>
using namespace std;
struct Birth
{
   	int y,d,m;
};
class Student
{
   string name,sex,id,h; 
   Birth b;
public:
	Student(string i,string j,string k,int a,int d,int c,string t)
	{
		name=j;sex=k;id=i;h=t ;
		b.y=a;
		b.m=d;
		b.d=c;
		
	}
    friend ostream&operator <<(ostream &out,Student &s)
    {
    	cout<<"身份证号、姓名、性别 、生日(年月日)和家庭住址"<<endl;
    	out<<s.id<<"  "<<s.name<<" "<<s.sex<<" "<<s.b.y <<" "<<s.b.m<<" "<<s.b.d<<"  "<<s.h;
    	return out;
    }
    Student(Student &a)
	{
		name=a.name;sex=a.sex;id=a.id;h=a.h ;
		b.y=a.b.y;
		b.m=a.b.m;
		b.d=a.b.d;
	}
};
int main()
{
	Student s("1","sdz","nan",1998,12,8,"江苏") ; 
	cout<<s<<endl;
	Student s1(s);
	  cout<<s1;
	return 0;
}

第五题

设计包含静态数据成员的类

某商店经销一种货物,货物成箱进,成箱卖出,购进和卖出都是以重量为单位(每箱的重量不同),商店需要记录下存货的总重量。

分析:

定义一个货物类,类中包含

私有成员 weight

一个静态数据成员total_weight;

在构造函数中,修改total_weight的值

在析构函数中,修改total_weight的值

在主函数中进行测试


#include<bits/stdc++.h>
using namespace std;
class Goods
{
   double w;
   static double totw;
public:
   Goods(double i=0)
   {
   	w=i;
   	totw+=w;
   }
   ~Goods()
   {
   	totw-=w;
   }
   void display()
   {
   	cout<<"当前货物总重量:"<<totw<<endl;
   }
};
double Goods::totw=0;
int main()
{
	Goods *p,*q;
	p=new Goods(10);
	p->display();
	q=new Goods(20);
	q->display();
	delete p;
	q->display();
	delete q;
	return 0;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值