最新内蒙古科技大学面向对象的程序设计实验6-静态成员和友元
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内蒙古科技大学
面向对象的程序设计
实验报告
一、实验目的
1.理解静态成员(静态数据成员、静态成员函数)的作用与使用;
2.理解友元(友元函数、友元类)的作用于使用。
二、实验环境
编译器:Visual C++ 6.0.
操作系统:Windows 7旗舰版
三、实验内容
二、实验内容
2.1练习(一):
1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include
#include
class CStudent
{
public:
CStudent(char *n, int a);
~CStudent();
static void SetAge(int age);
private:
char *name;
int age;
static int nTotalObj;
};
int CStudent::nTotalObj = 0;
CStudent::CStudent(char *n, int a)
:age(a)
{
int nLen = strlen(n);
name = new char[nLen+1];
strcpy(name,n);
name[nLen] = ’\0’;
nTotalObj++;
}
CStudent::~CStudent()
{
delete[] name;
nTotalObj--;
}
void CStudent::SetAge(int age)
{
this->age = age;
}
void main()
{
CStudent stu1("张三",25);
CStudent str2("李四",26);
cout<<"CStudent::nTotalObj="< } 问题一:以上程序编译能通过吗,为什么? 问题二:成员变量nTotalObj在程序中起什么作用,它是如何实现的? 问题三:如果规定该程序的主函数和类CStudent中的成员变量的属性不允许改变,应该如何改正该程序? 2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include #include class CStudent { public: CStudent(char *n, int a); ~CStudent(); private: char *name; int age; }; CStudent::CStudent(char *n, int a) :age(a) { int nLen = strlen(n); name = new char[nLen+1]; strcpy(name,n); name[nLen] = ’\0’; } CStudent::~CStudent() { delete[] name; } class CTeacher { public: CTeacher(char *tn, int ta); ~CTeacher(); void SetStuAge(int a); private: char *name; int age; CStudent stu; }; CTeacher::CTeacher(char *tn, int ta) :age(ta) { int nLen = strlen(tn); name = new char[nLen+1]; strcpy(name,tn); name[nLen] = ’\0’; } CTeacher::~CTeacher() { delete[] name; } void CTeacher::SetStuAge(int a) { stu.age = a; } void main() { CStudent stu("张三",25); CTeacher tea("李四",26); } 问题一:以上程序有两大错误,试指出来,并改正之? 2.2练习(二): 1.某商店经销一种货物。货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记录下货物库存的总重量。试用C++模拟商店货物购进和卖出的情况。(提示:将总重量定义为静态成员) 四、实验过程 练习1 题目提供源代码如下 编译结果如下 分析之后得出结论 首先静态成员函数SetAge中不可以使用指针,也不可以直接使用非静态数据成员age 此处应该使用对象名或者类名间接引用age 其次nTotalObj为私有属性,不可以直接访问,且题目要求不可以修改其属性,则添加一个成员函数,使其返回值等于nTotalObj,则代替了原先nTotalObj的功能 修改之后的代码如下