实验九类和对象的使用实验报告
一实验目的
1、学会用构造函数对类对象进行初始化
2、掌握析构函数,并了解构造函数和析构函数的调用顺序
3、了解对象数组和对象指针的用法
4、学会共用数据的保护,了解常对象、常成员函数等的使用限制
二实验内容和要求
1.回顾课本知识,掌握重点和难点,认真分析例题熟悉本章内容。
2.完成本章课后习题2、6、7题,认真分析每一题的代码。
三实验环境
Visual C++6.0开发环境
四源程序
2、
#include <iostream>
using namespace std;
class Date
{
public:
Date(int,int,int);
Date(int,int);
Date(int);
Date();
void display();
private:
int month;
int day;
int year;
};
Date::Date(intm,intd,int y):month(m),day(d),year(y)
{}
Date::Date(intm,int d):month(m),day(d)
{year=2005;}
Date::Date(int m):month(m)
{
day=1;
year=2005;
}
Date::Date()
{
month=1;
day=1;
year=2005;
}
void Date::display()
{
cout<<month<<"/"<<day<<"/"<<year<<endl; }
int main()
{
Date d1(10,13,2005);
Date d2(12,30);
Date d3(10);
Date d4;
d1.display();
d2.display();
d3.display();
d4.display();
return 0;
}
6、
#include <iostream>
using namespace std;
class Student
{
public:
Student(intn,float s):num(n),score(s) {};
void change(intn,float s)
{
num=n;
score=s;
}
void display()
{
cout<<num<<" "<<score<<endl;
}
private:
intnum;
float score;
};
int main()
Student stud(101,78.5);
stud.display();
stud.change(101,80.5);
stud.display();
return 0;
}
7、
#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,float s):num(n),score(s) {};
void change(int n,float s)
{
num=n;
score=s;
}
void display()const
{
cout<<num<<" "<<score<<endl;
}
private:
int num;
float score;
};
int main()
{
Student stud(101,78.5);
Student *const p=&stud;
p->display();
stud.change(101,80.5);
p->display();
return 0;
}
五实验步骤与测试
2.定义类Date,其中声明有四个重载构造函数,分别有三个、两个、一个、零个参数。
接着定义了
三个private数据年月日。
下面是对四个函数的定义,两个参数的对其数据year赋初值2005,一参的对year和day赋初值,无参的三个数据都赋初值。
主函数中定义了四个对象,并对应赋初值,根据实参的个数调用不用的构造函数,然后调用输出函数输出月日年。
6. 定义Student类,构造函数有两个参数。
又定义了两个成员函数,一个可改变成员数据的值,一
个用于输出。
主函数中定义对象,并赋初值,然后输出。
接着调用change函数改变成员数据的值,然后再输出。
7.
(1)编译发生错误。
因为定义stud为const对象时,普通成员函数是不可以访问对象数据的。
(2)常对象的成员数据是受保护不可修改的,但可以定义数据时加上mutable
这样,就可以改变想要改变的成员数据了。
还有一个问题是,普通成员函数是不能访问改变对象中的数据的,因此要定义常成员函数,在函数change和diplay的参数列表后面加上const
(3)成功运行。
此处是定义了一个指向类对象的指针,地址为对象stud的空间起始地址。
p->display() 等价于 stud.display()等价于(*p).display()。
(4) const Student *p=&stud; 定义了一个指向常对象的常指针。
(5) Student *const p=&stud;此处犯了一个很容易犯的错误,指向两边的类型不同,指针为指向对象的常指针,却把常对象的地址赋予了指针,因此会报错。
六实验结果分析
2、
6、
7.。