1.观察不同对象分别何时调用构造函数与析构函数,可考虑调用将调用时间作为输出。要求包括:全局对象,局部自动对象、静态局部对象
#include <iostream>
using namespace std;
class person {
public:
int m_age;
person(){
cout<<"person的默认构造函数"<<endl;
}
person(int age){
cout<<"person的有参构造函数"<<endl;
m_age=age;
}
~person(){
cout<<"析构"<<endl;
}
person(const person &p){
cout <<"person的拷贝构造函数"<<endl;
}
};
void test01(){
person p;
p.m_age=18;
person p2(p);
cout<<"p2的年龄为"<<p2.m_age<<endl;
}
int main(){
test01();
person p;
p.m_age=18;
system("pause");
return 0;
}
2.//.建立一个对象数组,
//内放5个学生的数据(学号、成绩等)
//,设立一个函数max,用指向对象的指针作函数参数,
//在max函数中找出5个学生中成绩最高者,并输出其学号; 建立静态数据成员,实现平均分计算
#include <iostream>
using namespace std;
class student
{
private:
int score;
int num;
static float average();
public:int count;
student(int n,int s):
num(n),score(s){
};
void max(student *);
};
void student::max (student *arr)
{
int maxscore = arr[0].score;
int maxnum=0;
for(int i=0;i<5;i++){
if(arr[i].score>maxscore){
maxscore = arr[i].score;
maxnum= i;
count++;
//TODO
}
}
cout<<"5个学生中成绩最高者是:"<<arr[maxnum].num<<"号"<<endl;
}
float student::average()
{
return average();
}
int main(){
student stu[5]{
student(12,100),
student(13,99),
student(14,98),
student(15,97),
student(16,96),
};
student * p=stu;
stu[5].max(p);
int average;
system("pause");
return 0;
}
3.(1)将下例程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。在主函数中调用display函数,使得display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。要求类的头文件与类实现部分的源文件分开存放。
(2)下例中分别将Date的头文件、源文件与Time的头文件、源文件分开存放,自行上机编译执行,体会友元使用方法
001头文件 touwenjian001.h
#include <iostream>
using namespace std;
class Date;
class Time
{
public:
Time(int h, int m, int s): hour(h), minute(m), sec(s){};
friend void display(Date &, Time &);
private:
int hour;
int minute;
int sec;
};
class Date
{
public:
Date(int m, int d, int y): month(m), day(d), year(y){};
friend void display(Date &, Time &);
private:
int month;
int day;
int year;
};
void display(Date &d, Time &t)
{
cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;
cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
源文件
#include"touwenjian001.h"
int main()
{
Time t1(10, 13, 56);
Date d1(12, 25, 2004);
display(d1, t1);
system("pause");
return 0;
}