}
intmain()
{
max(2,5);
max(7,5,3);
return0;
}
4、(变量的引用)
(1)定义一个swap1函数,以普通形参传入两个变量a、b,互换a、b的值。
(2)定义一个swap2函数,以指针形参传入两个变量a、b,互换a、b的值。
(3)定义一个swap3函数,以引用形参输入两个变量a、b,互换a、b的值。
(4)主函数定义两个变量x、y传入三个函数,观察x、y值前后的变化。
#include
usingnamespacestd;
voidswap1(inta,intb)
{
inttemp;
temp=a;
a=b;
b=temp;
}
voidswap2(int*a,int*b)
{
inttemp;
temp=*a;
*a=*b;
*b=temp;
}
voidswap3(int&a,int&b)
{
inttemp;
temp=a;
a=b;
b=temp;
}
intmain()
{
intx,y;
x=5;y=7;
swap1(x,y);
cout<<"x="<x=5;y=7;
swap2(&x,&y);
cout<<"x="<x=5;y=7;
swap3(x,y);
cout<<"x="<return0;
}
5、(类的定义)
定义一个student类,数据成员包括:
学号num,姓名name,年龄age,性别sex,成员函数包括:
(1)set函数,键盘输入学号,姓名,年龄,性别
(2)display函数,输出学生信息。
#include
#include
usingnamespacestd;
classstudent
{
private:
intnum;
stringname;
intage;
charsex;
public:
voidset()
{
cout<<"请输入:
学号,姓名,年龄,性别(form)"<cin>>num>>name>>age>>sex;
}
voiddisplay()
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"性别:
"<}
};
intmain()
{
students;
s.set();
s.display();
return0;
}
6、(构造函数和析构函数)
定义一个student类,数据成员包括:
学号num,姓名name,年龄age,性别sex,成员函数包括:
(1)构造函数,初始化学号,姓名,年龄,性别
(2)display函数,输出学生信息。
(3)析构函数,输出学生学号。
(4)主函数定义多个对象,并注意构造函数和析构函数的调用顺序。
#include
#include
usingnamespacestd;
classstudent
{
private:
intnum;
stringname;
intage;
charsex;
public:
/*voidset()
{
cout<<"请输入:
学号,姓名,年龄,性别(form)"<cin>>num>>name>>age>>sex;
}
*/
student(intnum,stringname,inta,ints):
age(a),sex(s)
{
cout<<"调用构造函数num="<this->num=num;
this->name=name;
//age=a;
//sex=s;
}
voiddisplay()
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"性别:
"<}
~student()
{
cout<<"析构函数学号:
"<}
};
intmain()
{
students(1001,"张三",25,'f'),s1(1002,"李四",24,'m');
//s.set();
s.display();
s1.display();
return0;
}
7、(构造函数的重载)
在题6基础上增加一个默认构造函数,实现构造函数的重载
#include
#include
usingnamespacestd;
classstudent
{
private:
intnum;
stringname;
intage;
charsex;
public:
/*voidset()
{
cout<<"请输入:
学号,姓名,年龄,性别(form)"<cin>>num>>name>>age>>sex;
}
*/
student()
{
cout<<"调用构造函数num="<<0<num=0;
name="";
age=18;
sex='f';
}
student(stringname,intnum=1001,inta=20,chars='f')
{
cout<<"调用构造函数num="<this->num=num;
this->name=name;
age=a;
sex=s;
}
voiddisplay()
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"性别:
"<}
~student()
{
cout<<"析构函数学号:
"<}
};
intmain()
{
students(1001,"张三",25,'f'),s1(1002,"李四",24,'m'),s2;
//s.set();
s.display();
cout<s1.display();
cout<s2.display();
cout<return0;
}
8、将题6用带默认参数的构造函数实现。
#include
#include
usingnamespacestd;
classstudent
{
private:
intnum;
stringname;
intage;
charsex;
public:
student(intnum=0,stringname="",inta=18,ints='f')
{
cout<<"调用构造函数num="<this->num=num;
this->name=name;
age=a;
sex=s;
}
voiddisplay()
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"性别:
"<}
~student()
{
cout<<"析构函数学号:
"<}
};
intmain()
{
students(1001,"张三",25,'f'),s1(1002,"李四",24,'m'),s2;
//s.set();
s.display();
cout<s1.display();
cout<s2.display();
cout<return0;
}
9、(对象数组和对象的动态建立及释放)
在题8基础上,实现如下主函数:
(1)在主函数中定义一个包含三个学生的数组,并初始化之。
(2)在主函数中定义一个student类指针p并用new运算符分配动态内存
(3)用delete删除p指向的动态内存。
(4)观察构造函数和析构函数的调用。
#include
#include
usingnamespacestd;
classstudent
{
private:
intnum;
stringname;
intage;
charsex;
public:
student(intnum=0,stringname="",inta=18,ints='f')
{
cout<<"调用构造函数num="<this->num=num;
this->name=name;
age=a;
sex=s;
}
voiddisplay()
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"性别:
"<}
~student()
{
cout<<"析构函数学号:
"<}
};
intmain()
{
students[3]={student(),
student(1002,"张三",25,'f'),
student(1003,"李四",24,'m')
};
for(inti=0;i<3;i++)
{
s[i].display();
cout<}
student*p;
p=newstudent(1003,"王五",23,'f');
p->display();
cout<deletep;
return0;
}
10、(复制构造函数)
在题8基础上新增加一个复制构造函数,并主函数新增复制构造对象。
#include
#include
usingnamespacestd;
classstudent
{
private:
intnum;
stringname;
intage;
charsex;
public:
student(intnum=0,stringname="",inta=18,ints='f')
{
cout<<"调用构造函数num="<this->num=num;
this->name=name;
age=a;
sex=s;
}
student(student&s)
{
num=s.num;
name=s.name;
age=s.age;
sex=s.sex;
}
voiddisplay()
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"性别:
"<}
~student()
{
cout<<"析构函数学号:
"<}
};
studentfun(students)
{
returns;
}
intmain()
{
students1(1001,"张三",25,'f');
students2(s1);
students2=s1;
students3;
s3=fun(s1);
s1.display();
s2.display();
return0;
}
11、(静态成员)
定义一个student类,数据成员包括:
学号num,姓名name,成绩score,累加总分sum,累计人数count。
成员函数包括:
构造函数统计人数count;
(1)非静态成员total函数,求sum。
(2)静态成员average函数,求平均成绩。
(3)主函数定义包含3个学生的数组,求三个学生的平均成绩。
#include
#include
usingnamespacestd;
classstudent
{
private:
intnum;
stringname;
floatscore;
staticfloatsum;
staticintcount;
public:
student(intnum=0,stringname="",floats=80)
{
this->num=num;
this->name=name;
score=s;
count++;
total();
}
voiddisplay()
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"成绩:
"<}
voidtotal();
staticfloataverage();
};
floatstudent:
:
sum=0.0;
intstudent:
:
count=0;
voidstudent:
:
total()
{
sum+=score;
}
floatstudent:
:
average()
{
returnsum/count;
}
intmain()
{
students[3]={student(1001,"张三",87),student(1002,"李四"),student(1003,"王五",90)};
for(inti=0;i<3;i++)
{
s[i].total();
}
cout<<"平均成绩:
"<:
average()<return0;
}
12、(友元函数)
定义一个Time类,私有数据成员包括:
时hour、分minute、秒second
成员函数:
构造函数Time()
定义一个友元函数display,使之访问私有成员输出时分秒。
#include
//#include
//usingnamespacestd;
classTime
{
private:
constinthour;//常数据成员
intminute;
intsecond;
public:
Time(inth=12,intm=0,ints=0)
{
hour=h;
minute=m;
second=s;
}
voidset()const;//常成员函数
friendvoiddisplay(Time&);
};
voiddisplay(Time&t)
{
cout<}
intmain()
{
constTimet;//常对象
Timet,t1(13,12,22);
display(t);
display(t1);
return0;
}
13、(运算符重载)
(1)定义一个复数类,实现对“+”的重载,使之可实现以下主函数。
intmain()
{
Complexa(3,4),b(1,2),c,d,e,f;
c=a+b;
d=a+5;
e=3+b;
cin>>f;
cout<return0;
}
(2)定义一个Time类,实现对“++”的前缀、后缀重载。
P134
13、()
//方法:
多次重载+
#include
//#include
//usingnamespacestd;
classComplex
{
private:
floatreal;
floatimage;
public:
Complex(floatreal,floatimage)
{
this->real=real;
this->image=image;
}
Complex()
{
real=0;
image=0;
}
friendComplexoperator+(Complex&a,Complex&b);
friendComplexoperator+(Complex&a,floatb);
friendComplexoperator+(floata,Complex&b);
friendostream&operator<<(ostream&output,Complex&a);
friendistream&operator>>(istream&input,Complexa);
};
Complexoperator+(Complex&a,Complex&b)
{
returnComplex(a.real+b.real,a.image+b.image);
}
Complexoperator+(Complex&a,floatb)
{
returnComplex(a.real+b,a.image);
}
Complexoperator+(floata,Complex&b)
{
returnComplex(b.real+a,b.image);
}
ostream&operator<<(ostream&output,Complex&a)
{
if(a.image>0)
{
output<}
else
{
output<}
returnoutput;
}
istream&operator>>(istream&input,Complex&a)
{
input>>a.real>>a.image;
returninput;
}
intmain()
{
Complexa(3,4),b(1,2),c,d,e,f;
c=a+b;
d=a+5;
e=3+b;
cout<cin>>f;
cout<return0;
}
//方法:
使用转换构造函数实现
#include
classComplex
{
private:
floatreal;
floatimage;
public:
Complex(floatreal,floatimage)
{
this->real=real;
this->image=image;
}
Complex()
{
real=0;
image=0;
}
//定义转换构造函数
Complex(floatr)
{
real=r;
image=0;
}
//类型转换函数
operatorfloat()
{
returnreal;
}
friendComplexoperator+(Complex&a,Complex&b);
friendostream&operator<<(ostream&output,Complexa);
friendistream&operator>>(istream&input,Complexa);
};
Complexoperator+(Complex&a,Complex&b)
{
returnComplex(a.real+b.real,a.image+b.image);
}
ostream&opera