最新内蒙古科技大学面向对象的程序设计实验6-静态成员和友元

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的功能

修改之后的代码如下

相关文档
最新文档