return0;
}
实验三类和对象
(一)
一、实验目的
1、掌握声明类的方法,类和类的成员的概念以及定义对象的方法。
2、掌握类的构造函数与析构函数的概念和使用方法。
3、初步掌握用类和对象编制基于对象的程序。
二、实验要求
1、分析下面的程序,写出其运行时的输出结果。
#include
usingnamespacestd;
classDate
{public:
Date(int,int,int);
Date(int,int);
Date(int);
Date();
voiddisplay();
private:
intmonth;
intday;
intyear;
};
Date∷Date(intm,intd,inty):
month(m),day(d),year(y){}
Date∷Date(intm,intd):
month(m),day(d){year=2005;}
Date∷Date(intm):
month(m)
{day=1;
year=2005;
}
Date∷Date()
{month=1;
day=1;
year=2005;
}
voidDate∷display()
{cout<intmain()
{Dated1(10,13,2005);
Dated2(12,30);
Dated3(10);
Dated4;
d1.display();
d2.display();
d3.display();
d4.display();
return0;
}
//10/13/2005
12/30/2005
10/1/2005
1/1/2005
2、建立一个名为Student的类,该类有以下几个私有成员变量:
学生姓名、学号、性别、年龄。
还有以下两个成员变量:
一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。
编写一个主函数,声明一个学生对象,然后调用成员函数在屏幕输出学生信息。
#include"iostream"
#include"string"
usingnamespacestd;
classstudent
{
public:
student();
voiddisplay();
private:
stringsName,sNum;
charchSex;
intiAge;
};
student:
:
student(stringna,stringnum,chars,inta):
sName(na),sNum(num),
chSex(s),iAge(a){}
voidstudent:
:
display()
{
cout<<"----------THEINFORMATIONOFSTUDENT----------\n";
cout<<"name:
"<"<<<"sex:
"<"<}
intmain()
{
students("WangFang","0811045263",'w',20);
s.display();
return0;
}
3、类Person的定义如下,请实现该类,并在主函数中创建对象obj,然后使用构造函数为obj赋予初始值(内容自定)。
classPerson
{private:
charname[10];
intage;
intsalary;
chartel[8];
public:
Person(char*xname,intxage,intxsalary,char*xtel);
voiddisp();
};
解:
#include
#include
Person:
:
person(char*Xname,intXage,intXsalary,char*Xtel)
{strcpy(name,xname);
age=xage;
salary=xsalary;
strcpy(tel,xtel);}
voidPerson:
:
disp()
{cout<<“姓名:
”<cout<<“年龄”:
<cout<<“工资”:
<cout<<“电话”:
<}
voidmain()
{Personobj(“张三”,25,850,“45678912”);
obj.disp()
}
实验四类和对象
(二)
一、实验目的
1、进一步加深对类和对象的理解。
2、掌握对类的对象数组、对象的指针及其使用方法。
3、掌握友元的概念和使用。
4、了解类模板的使用方法。
二、实验要求
1、分析并比较下列程序运行的结果。
程序一:
#include
#include
classsmallone
{public:
smallone(intsma)
{cout<<"smconstr:
"<};
voidfn(intn)
{smallonesm(n);
cout<<"infunctionfnwithn="<}
intmain()
{fn(10);
fn(20);
return0;
}
//smconstr:
10
infunctionfnwithn=10
smconstr:
20
infunctionfnwithn=20
程序二:
#include
#include
classsmallone
{public:
smallone(intsma)
{cout<<"smconstr:
"<};
voidfn(intn)
{staticsmallonesm(n);
cout<<"infunctionfnwithn="<}
intmain()
{fn(10);
fn(20);
return0;
}
//smconstr:
10
infunctionfnwithn=10
infunctionfnwithn=20
2、建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
#include
usingnamespacestd;
classStudent
{public:
Student(intn,floats):
num(n),score(s){}
intnum;
floatscore;
};
voidmain()
{Studentstud[5]={
Student(101,78.5),Student(102,85.5),Student(103,98.5),
Student(104,100.0),Student(105,95.5)};
voidmax(Student*);
Student*p=&stud[0];
max(p);
reyurn0;
}
voidmax(Student*arr)
{floatmax_score=arr[0].score;
intk=0;
for(inti=1;i<5;i++)
if(arr[i].score>max_score){max_score=arr[i].score;k=i;}
cout<}
3、声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。
#include
usingnamespacestd;
template
classCompare
{public:
Compare(numtypea,numtypeb)
{x=a;y=b;}
numtypemax()
{return(x>y)?
x:
y;}
numtypemin()
{return(xx:
y;}
private:
numtypex,y;
};
intmain()
{Comparecmp1(3,7);
cout<cout<Comparecmp2(45.78,93.6);
cout<cout<Comparecmp3('a','A');
cout<cout<return0;
}
实验五运算符重载
一、实验目的
1、进一步了解运算符重载的概念和使用方法。
2、掌握几种常用的运算符重载的方法。
二、实验要求
1、定义一个复数类Complex,重载运算法“+”,使之能用于复数的加法运算。
将运算符重载为普通函数(非成员、非友元)、成员函数、友元函数。
根据要求修改通过函数来实现复数相加的示例,分别编写程序,求两个复数之和。
#include
usingnamespacestd;
classComplex//定义Complex类
{public:
Complex(floatx=0,floaty=0){real=x;imag=y;}//构造函数
Complexcomplex_add(Complex&c2);//声明复数相加函数
voiddisplay(){cout<private:
floatreal;//实部
floatimag;//虚部
};
ComplexComplex:
:
complex_add(Complex&c2)
{Complexc;
c.real=real+c2.real;
c.imag=imag+c2.imag;
returnc;
}
intmain()
{Complexcomplex1(3.34f,4.8f),complex2(12.8f,5.2f);
Complexcomplex;//定义3个复数对象
complex=plex_add(complex2);//进行两个复数的加运算
complex.display();
return0;
}
//16.14+10i
//普通函数(非成员、非友元)
#include
usingnamespacestd;
classComplex
{public:
Complex(){real=0;imag=0;}
Complex(doubler,doublei){real=r;imag=i;}
doubleget_real();
doubleget_imag();
voiddisplay();
private:
doublereal;
doubleimag;
};
doubleComplex:
:
get_real()
{returnreal;}
doubleComplex:
:
get_imag()
{returnimag;}
voidComplex:
:
display()
{cout<<"("<Complexoperator+(Complex&c1,Complex&c2)
{
returnComplex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());
}
intmain()
{Complexc1(3,4),c2(5,-10),c3;
c3=c1+c2;
cout<<"c3=";
c3.display();
return0;
}
//运算符重载为成员函数
#include
usingnamespacestd;
classComplex
{public:
Complex(){real=0;imag=0;}
Complex(doubler,doublei){real=r;imag=i;}
Complexoperator+(Complex&c2);
voiddisplay();
private:
doublereal;
doubleimag;
};
ComplexComplex:
:
operator+(Complex&c2)
{Complexc;
c.real=real+c2.real;
c.imag=imag+c2.imag;
returnc;}
voidComplex:
:
display()
{cout<<"("<intmain()
{Complexc1(3,4),c2(5,-10),c3;
c3=c1+c2;
cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
cout<<"c1+c2=";c3.display();
return0;
}
//将运算符重载为友元函数
#include
usingnamespacestd;
classComplex
{public:
Complex(){real=0;imag=0;}
Complex(doubler){real=r;imag=0;}
Complex(doubler,doublei){real=r;imag=i;}
friendComplexoperator+(Complex&c1,Complex&c2);
voiddisplay();
private:
doublereal;
doubleimag;
};
Complexoperator+(Complex&c1,Complex&c2)
{returnComplex(c1.real+c2.real,c1