一、实验目的和要求
1.类的定义;
2.对象的定义和使用;
3.成员变量和成员函数的定义和使用;
二、实验环境(软、硬件及条件)
一台安装有Visual C++ 6.0的计算机
三、实验步骤
1.阅读下面的程序,回答程序后面的问题。
#include <iostream.h>
class CDate
{
void Set(int m, int d, int y )
{
month = m ;
day = d ;
year = y ;
}
int IsLeapYear()
{
return (year%4 == 0 && year%100 != 0)||(year%400 == 0);
}
public:
void Print()
{
cout<<month<<"/"<<day<<"/"<<year<<endl;
}
private:
int month; int day; int year;
};
void main()
{
CDate a;
a.Set(10,15,2007) ;
a.Print();
}
问题1:找出上述程序中的错误及发生错误的原因,然后改正。
问题2:类CDate中分别有哪些成员函数和成员变量,它们分别属于哪种访问权限?
2.阅读下面的程序,回答程序后面的问题。
#include <iostream.h>
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<<month<<"/"<<day<<"/"<<year<<endl;
}
private:
int month; //成员变量
int day;
int year;
};
void main()
{
CDate a;
a.Set(3,15,2016) ;
a.Print();
}
问题1:该程序的运行结果是
问题2:①处是在给成员变量赋值,还是在给全局变量赋值,如果去掉域作用符::,程序是否还能正确运行?
问题3:②处调用的哪个函数,如果去掉域作用符::,程序能否正确运行?为什么?
3.试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个公有成员函数,分别用来设置成员数据和输出成员数据,在主函数中调用该类的公有函数设置和输出成员数据。
4. 用面向对象的方法编程求5!
四、实验中遇到的问题及解决
五、实验结果及分析
1.(1),Set函数没有声明,默认为私有,而主函数访问私有成员函数,这是不允许的。改正:在Set函数前声明public.
(2)成员函数: void Set(int m, int d, int y ),int IsLeapYear(),void Print();(公有)
成员变量: int month; int day; int year;(私有)
2.(1)-858993460/-858993460/-858993460
(2)给全局变量赋值。能正确运行。
(3)调用Set函数。不能正确运行,因为这是给成员函数的形参初始化,若是去掉作用域::,则是调用函数。与程序要求的不相符。
3.
#include<iostream>
using namespace std;
class Fushu
{private:
int a;int b;
public:
void display(int x,int y){a=x,b=y;}
int play(){cout<<" "<<a<<"+"<<""<<b<<"i"<<endl;return 0;}
};
void main()
{
Fushu f;
f.display(4,5);
f.play();
}
4.
#include<iostream.h>
class J
{
public:
int n;
int result();
};
int J::result()
{
int i = 1,m = 1;
for(;i<n+1;i++)
m=m*i;
return m;
}
void main()
{
J temp;
temp.n = 5;
cout<<"5!="<<temp.result()<<endl;
}