面向对象程序设计实验报告 下载本文

答:调用的函数是void swap(int*a,int*b)。

实验二 类和对象——类的构建

2.1 实验目的 1.类的定义; 2.类对象的使用;

3.类成员变量的定义和使用; 4.类成员函数的定义和使用; 5.理解类的作用域; 6.理解类的声明;

7.理解类中成员的访问属性; 2.2 实验内容 2.2.1程序阅读

1. 理解下面的程序并运行,然后回答后面的问题。 #include class CDate {

public: void Set(int m,int d,int y) { month=m; day=d; year=y; } int IsLeapYear() { return (year%4==0 && year0!=0)||(year@0==0); } void Print() { cout<

};

void main() { CDate a; a.Set(10,15,2007); a.Print(); }

问题一:以上程序为什么不能通过编译?如何改正?

答:因为Set函数被设为私有main函数中无法调用,应在set函数前加public。 问题二:类中的成员函数和成员变量分别属于哪种访问权限?

答:数据成员为私有,Print为公有;set原为私有,改正后为公有。 问题三:①处语句的意思是什么? 答:将类定义一个对象a。

2.理解下面的程序并运行,然后回答问题。 . #include int month;//全局变量 int day; int year;

void Set(int m,int d,int y) { ::month=m; ::day=d; ::year=y; }

class CDate {

public: void Set(int m,int d,int y) { ::Set(m,d,y); } void Print() { cout<

int day; int year; };

void main() { CDate a; a.Set(10,15,2007); a.Print(); }

问题一:①处是在给成员变量赋值还是全局变量赋值,如果去掉域作用符::,程序是否还能正确运行? 答:全局变量,不能。

问题二:②处调用的哪个函数,如果去掉域作用符::,程序是否还能正确运行? 答:调用全局set函数;不能。 问题三:程序的输出结果是? 答:

实验三 类和对象——构造函数与析构函数

3.1实验目的

1.理解this指针的作用和用法; 2.掌握构造函数的定义和作用; 3.掌握构造函数的使用;

4.掌握拷贝构造函数的定义和使用; 5.掌握构造函数的重载;

6.掌握析构函数的定义和使用。 3.2实验内容 3.2.1程序阅读

1.理解下面的程序并运行,然后回答问题。

#include class CPoint {

public: void Set(int x,int y); void Print(); private: int x; int y; };

void CPoint::Set(int x,int y) { x=x; y=y; }

void CPoint::Print() { cout<<\}

void main() { CPoint pt; pt.Set(10,20); pt.Print(); }

问题一:以上程序编译能通过吗?如果不能,原因是什么? 答:能通过编译。

问题二:以上程序的运行结构是否正确,如果不正确,分析为什么,如何改正? 答:运行结构不正确,因为Set函数中,x=x,参数x覆盖数据成员,使得数据成员并没有被赋值。

2.理解下面的程序并运行,然后回答后面的问题。 include class CPerson {

public: void Print(); private: