类与对象 实验六 期末回顾
原创
©著作权归作者所有:来自51CTO博客作者mb5f5b1df7f1e34的原创作品,请联系作者获取转载授权,否则将追究法律责任
实验目录:
第一题:(有知识点)
1、写出类A的定义,通过类的静态成员来记录已经创建的A类的实例(对象)的个数,使得下面的程序:
void main()
{A *pa=new A[10];
cout<<“thereare”<<pa->GetObjCount()<<“objects”<<endl;
delete []pa;
cout<<“thereare”<<A::GetObjCount()<<“objects”<<endl;
}
得到的输出为:
there are10 objects
there are 0 objects
#include<bits/stdc++.h>
using namespace std;
class A
{
static int num;
public:
A()
{
num++;
}
~A()
{
num--;
}
static int GetObjCount()
{
return num;
}
};
int A::num=0;
int main()
{
A *pa=new A[10];
cout<<"there are "<<pa->GetObjCount()<<" objects"<<endl;
delete []pa;
cout<<"there are "<<A::GetObjCount()<<" objects"<<endl; //知识点:对象被消除仍可以访问
return 0;
}
第二题:
2、补充下列程序(程序见下页幻灯片)。
定义一个boat类,含有weight数据成员。
定义该类的一个友元函数, 该函数能输出一个boat对象的重量。
#include<iostream>
using namespace std;
class Boat{
int weight;
public:
Boat(int w):weight(w){}
friend void display_weight(Boat &a);
};
void display_weight(Boat &a)
{
cout<<a.weight<<endl;
}
int main()
{
Boat b(100);
display_weight(b);
return 0;
}
第三题:
3、写完整程序。
定义一个Boat类和Car类,均含有weight数据成员。
定义一个友元函数,该函数能输出一个Boat对象和一个Car对象的重量和。
提示:(1)友元函数可以定义成如下形式: (注意形参)
void display_weight(Boat &boat, Car &car)
(2)如果先定义Boat类,类中用friend对友元函数声明,friend void display_weight(Boat &boat ,Car &car);
这里会出现还未定义的Car类,因此,需要在定义Boat类之前需用class Car;对Car类进行声明
类似,如果先定义Car类,则需要对Boat类先进行声明
●
#include<iostream>
using namespace std;
class Car;
class Boat{
int weight;
public:
Boat(int w):weight(w){}
friend void display_weight(Car &b,Boat &a);
};
class Car
{
int weight;
public:
Car(int w):weight(w){}
friend void display_weight(Car &b,Boat &a);
};
void display_weight(Car &b,Boat &a)
{
cout<<a.weight+b.weight<<endl;
}
int main()
{
Boat b(100);
Car c(150);
display_weight(c,b);
return 0;
}
第四题:
4、编写函数,计算两个点之间的距离
定义一个point类。
定义该类的一个友元函数,该函数能计算两个点之间的距离(提示:该函数有两个point类型的形参)。
#include<bits/stdc++.h>
using namespace std;
class Point
{
double x,y;
public:
Point(double i,double j)
{
x=i;y=j;
}
friend void d(Point &p1,Point &p2);
};
void d(Point &p1,Point &p2)
{
cout<<sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
int main()
{
Point p1(3,4),p2(0,0);
d(p1,p2);
return 0;
}
第五题:
静态成员和静态成员函数应用
#include<bits/stdc++.h>
using namespace std;
class Student
{
double score;
static double tot,cou;
public:
int sscore(double s) //这样就不用数组了
{
score=s;
tot+=s;
cou++;
}
static double sum()
{ cout<<tot<<endl;
return tot;
}
static double ave()
{
return tot/cou;
}
};
double Student::tot=0;
double Student::cou=0;
int main()
{
int n;
cout<<"请输入学生总人数:"<<endl;
cin>>n;
Student s;
for(int i=0;i<n;i++)
{
double a;
cout<<"请输入第"<<i+1<<"个学生成绩:"<<endl;
cin>>a;
s.sscore(a);
}
cout<<"学生成绩总和:"<<s.sum()<<endl;
cout<<"学生平均成绩:"<<s.ave()<<endl;
return 0;
}